Установите UILabel с другого контроллера представления Swift

У меня есть сегментированный элемент управления в SettingsController.

Сегментированный элемент управления может отображать температуру в градусах Цельсия или Фаренгейта.

У меня есть mainViewController, где у меня есть метка температуры, которая отображает текущую температуру в градусах Цельсия.

При щелчке сегментированного элемента управления я хочу преобразовать температуру в соответствующую единицу и отобразить ее в mainViewController.

@IBOutlet weak var temperatureUnitSegmentedControl: UISegmentedControl!
var mainViewController : MainViewController?

@IBAction func temperatureSegmentedControlListener(sender: UISegmentedControl) {

        switch temperatureUnitSegmentedControl.selectedSegmentIndex
        {
        case 0:
            showTemperatureInCelsius()
        case 1:
            showTemperatureInFahrenheit()
        default:
            break;
        }
    }
    func showTemperatureInCelsius(){
        mainViewController?.setTempInCelsius()

    }
    func showTemperatureInFahrenheit(){
            mainViewController?.setTempInFahrenheit()
    }

В mainViewController я хочу выполнить преобразования и обновить метку температуры.

func setTempInCelsius(){
        temperatureLabel.text = "In Celsius"
        log?.debug("Temperature Celsius\(batteryTemperatureLabel.text)")
    }

    func setTempInFahrenheit(){
        temperatureLabel.text = "In Fahrenheit"
        log?.debug("Temperature Fahrenheit\(batteryTemperatureLabel.text)")
    }

Этот код не затрагивает функции в mainViewController, и значение метки не обновляется.

Любая помощь будет оценена. Спасибо


person A.S    schedule 06.10.2016    source источник
comment
Для начала: где вы устанавливаете переменную mainViewController? Кроме того, я предполагаю, что первый блок кода, который вы показываете, находится в этом SettingsController? Я предполагаю, что вы просто никогда не устанавливаете переменную для нужного вам контроллера. О, и если это родитель, не забудьте сделать переменную weak, или вы столкнетесь с циклом сохранения.   -  person Gero    schedule 06.10.2016
comment
Проверьте ссылку, это решит вашу проблему /5210535/   -  person Joe    schedule 06.10.2016


Ответы (2)


Вы можете использовать делегатов или протокол. нажмите здесь

если вам нужно обновить представления, вы можете использовать nsnotificationcenter Нажмите здесь

person Ranjana Dangol    schedule 06.10.2016
comment
Вы также должны добавить некоторый код, потому что ссылки могут сломаться в будущем, или опубликовать его в качестве комментария. :) - person Bista; 06.10.2016

Yoa может просто отправить действие на ваш целевой контроллер представления, чтобы установить такие значения, как UIApplication.sharedApplication().sendAction("setTempInCelsious", to: nil, from: nil, forEvent: nil)

Надеюсь это поможет.

person Sachin Amrale    schedule 06.10.2016