Каков наилучший способ настройки «подробного» ViewController? Скажем, у меня очень простой DetailViewController с UILabel. Он имеет API (это псевдо-код для demostrate концепции):iOS Инициализация контроллера View View
UpdateLabel(string text)
{
this.label.text=text;
}
Так в родительском ViewController, у меня есть:
PrepareForSegue(UIStoryboardSegue segue, NSObject sender)
{
base.PrepareForSegue(segue, sender);
DetaiViewController.UpdateLabel("Hello");
}
Однако это выходит из строя, потому что «метка» является недействительным в Подробно Просмотрите контроллер, потому что ViewDidLoad еще не вызван. Я знаю, что это можно исправить, добавив что-то в это обновление в UpdateLabel
UpdateLabel(string text)
{
this.View.Hidden=this.View.Hidden; // To force view to load
this.label.text=text;
}
но это кажется очень хриплым.
С другой стороны, я мог бы изменить UpdateLabel просто хранить строку:
UpdateLabel(string text)
{
this.textString.text=text;
}
, а затем инициализирует метку в ViewDidLoad:
public override void ViewDidLoad()
{
base.ViewDidLoad();
this.label.text=this.textString;
}
Но что, если я хочу, чтобы родительский контроллер modifiy метку позже? Вызов UpdateLabel будет только обновлять переменную textString и не менять метку.
Каков правильный подход для этого?
Спасибо за быстрый ответ, но это не звучит как очень хороший API. Фактически у нас были бы InitLabel и UpdateLabel, и до сих пор неясно, когда можно безопасно позвонить в UpdateLabel, например, InitLabel, за которым немедленно следует UpdateLabel, по-прежнему будет аварийно завершена. – Bbx
Хорошо, используя этот шаблон в течение некоторого времени, и у меня нет никаких проблем с ним. В 'viewDidLoad' вы можете вызвать метод, который вы используете для обновления' UILabel'. – Peres