一个我不确定的相当基本的问题。我通常在 viewDidLoad
中设置我的 UIViewController
的 View 相关代码。如果 Controller 具有标签等的某些属性,我将在这里初始化它们并将它们添加到 View 中。这些属性通常在 .m 中声明,因此可以被视为伪私有(private)的。
但是 - 如果 Controller 在其头文件中公开这些属性之一(比方说 UILabel
),我发现在设置它时我不能依赖它的存在向上。例如:
CustomViewController *controller = [CustomViewController alloc] initWithNibName:nil bundle:nil];
controller.someLabel.text = @"label text goes here";
//then comes the presentation code
我发现我设置标签文本的时间过早 - viewDidLoad
尚未触发,因此标签为 nil。
我应该在 init
中创建这个标签并将其添加到 viewDidLoad
中吗?我应该在 init
中进行所有设置吗?或者也许所有 View 属性的初始化?还是具体情况具体判断?
或者根本原因可能是我不应该让 Controller 公开 View (标签)并使用其他模式?
我正在寻找一种一致的方式来构建我的代码。
最佳答案
是的,你已经很正确了。问题是,在实际呈现 View 之前,不会加载 Controller 的所有 View 组件。因此,您无法从 Controller 外部设置任何 IBOutlets。
例如,传递 UILabel 的文本的一种方法是创建一个新的字符串属性,比方说 self.myString
,从外部分配它,并在您的 viewDidLoad 中设置标签的文本此属性。
CustomViewController *controller = [CustomViewController alloc] initWithNibName:nil bundle:nil];
controller.myString = @"label text goes here";
在 CustomViewController
中:
- (void)viewDidLoad
{
[super viewDidLoad];
(...)
self.label.text = self.myString;
}
关于ios - 在 UIViewController 中的何处设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18477587/