instantiateViewControllerWithIdentifier 和 initWithNibName 之间的区别是什么,除了前者是故事板而后来不是?
UIStoryboard *signupStory = [UIStoryboard storyboardWithName:@"SignupStory" bundle:[NSBundle mainBundle]];
SignupLoginViewController *signUpVC = [signupStory instantiateViewControllerWithIdentifier:@"SignupVC"];
和
SignupLoginViewController *signUpVC = [[SignupLoginViewController alloc] initWithNibName:@"SignupLoginViewController" bundle:[NSBundle mainBundle]];
答案 0 :(得分:7)
如果您已使用故事板创建了UI,则需要致电instantiateViewControllerWithIdentifier
。这里,标识符不是视图控制器本身的一部分,而是仅由故事板用于定位视图控制器。故事板将处理初始化并最终调用initWithCoder
,这就是在创建子类视图控制器时需要覆盖它的原因。
另一方面,如果您的UI位于纯.xib文件中 - 开发人员通常使用initWithNibName
。从技术上讲,它确实打破了封装,还有其他方法可以做到这一点,但是你会发现它最常用,因为它是该类的指定初始化器。