2016-03-18 2 views
0

Я просто пытаюсь отправить текст в UILabel на другом ViewController через Segue:Почему я не могу отправить значение UILabel на другой ViewController?

let controller = segue.destinationViewController as! DetailViewViewController 
controller.detailViewLabel.text = "Hello!" 

Но когда выполняется переход, detailViewLabel является nil каждый раз.

Однако, если отправить строку в новый var типа string, то присвойте detailViewLabel.text новой строке в viewDidLoad, она отлично работает.

Например, это работает отлично:

var detailViewLabelText: String! 

@IBOutlet weak var detailViewLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    detailViewLabel.text = detailViewLabelText 
    // Do any additional setup after loading the view. 
} 

Почему я не могу напрямую отправить строку в text свойство UILabel через Segue?

ответ

5

Контроллеры выходных сигналов не подключены до момента загрузки в первый раз. Представления загружаются, когда свойство view доступа к UIViewController осуществляется в первый раз.

Итак, ваш код должен работать, если вы принудительно загрузите представление, прежде чем пытаться установить текст на ярлыке, например.

let controller = segue.destinationViewController as! DetailViewViewController 
let _ = controller.view 
controller.detailViewLabel.text = "Hello!" 
0

Вы также можете просто инициализировать строку, которую вы пытаетесь отправить за пределы класса, тогда она доступна для всех классов. Это не очень профессионально, но это работает :)

0

Я делаю что-то похожее на Даниэля Холла, но я устанавливаю данные в переменную, а затем, после загрузки вида, я устанавливаю label.text для переменной.

Смежные вопросы