我是iOS开发的新手,我正在阅读这本书:Big Nerd Ranch的iOS编程(目标C)。
我很困惑,因为在以编程方式创建视图时初始化UIButtons,UIImageView等子视图的位置:
或
我已经看到两种方法都在各种stackoverflow帖子中使用,但没有帖子说明哪种方法是正确的。
答案 0 :(得分:2)
您可以根据应用的要求进行初始化。如果任何视图或按钮或任何内容是应用程序初始设置的一部分,那么您应该在viewDidload中初始化它。
现在,例如需要用户按下按钮,然后将创建新视图,然后您可以在按钮的点击方法等中初始化视图。
所以,这取决于你的要求。
应该在viewdidload
初始化从开始到应用的静态视图,因为这是调用viewcontroller的第一个方法。
希望这会有所帮助:)
答案 1 :(得分:1)
它取决于您使用的是哪种架构。 Apple提出了模型 - 视图 - 控制器的标志,但实际上,UIViewControllers是View。 例如: 假设您有一个漂亮的LoginViewController。实例化它时,您将执行类似
的操作LoginViewController *loginVC = [[LoginViewController alloc] init];
此时,未加载任何视图。您的ViewController刚刚执行了init方法,没有别的。当系统调用
时loginVC.view
要执行的第一个方法是
- (void)loadView;
你应该这样做,加载你的观点。所以,我喜欢的方法是有一个额外的LoginView。
- (void)loadView
{
// you should have a property @property (nonatomic, strong) LoginView *loginView;
self.loginView = [[LoginView alloc] init];
self.view = self.loginView;
}
并且在LoginView init方法中,您应该放置代码来构建视图。
但是,您可以删除LoginView,并实例化所有子视图,如下所示:
- (void)loadView
{
self.view = [[UIView alloc] init];
UIButton *button = [[UIButton alloc] initWithTargetBlaBlaBla...];
[self.view addSubview:button];
// add more fancy subviews
}
根据我的经验,第一种方法比第二种方法更清洁。它还使版本控制更容易(尝试合并xib,我敢说你)。我总是使用MyView.m来构建视图(a.k.a setup constriants,style)并使用MyViewController.m之类的东西,比如动画,生命周期。我喜欢认为MyView.m是编程的xib,所以你可以用xib做任何事情,你应该能够在你的视图中做到。
希望它有所帮助!!