Ios UIViewController外部分配
我有一个Ios UIViewController外部分配,ios,objective-c,uiviewcontroller,Ios,Objective C,Uiviewcontroller,我有一个UIViewController,其中包含一个x字段。根据x的值,UIViewController可以有不同的接口 现在,我想询问外部赋值viewController.x=x1将在viewDidLoad之前或之后发生,viewwillbeen,awakeFromNib 例如: CustomViewController vc = [self.storyboard instantiateViewControllerWithIdentifier:@"CustomViewController"]
UIViewController
,其中包含一个x
字段。根据x
的值,UIViewController
可以有不同的接口
现在,我想询问外部赋值viewController.x=x1
将在viewDidLoad
之前或之后发生,viewwillbeen
,awakeFromNib
例如:
CustomViewController vc = [self.storyboard instantiateViewControllerWithIdentifier:@"CustomViewController"];
vc.x = x1;
或
将两个构造函数作为视图控制器的静态方法 我相信,在初始化视图控制器时,您已经知道x的值,因此可以在以下情况之前调用正确的构造函数:
+ (CustomeViewController*)createFromNib {
return [[CustomViewController alloc] initWithNibName:@"CustomViewController" bundle:nil];
}
+ (CustomeViewController*)createFromStoryBoard {
UIStoryboard *mystoryboard = [UIStoryboard storyboardWithName:@"myStoryBoardName" bundle:nil];
return [mystoryboard instantiateViewControllerWithIdentifier:@"CustomViewController"];
}
viewDidLoad
等将不会被调用,直到第一次将UIViewController
推送/呈现到UINavigationController
视图控制器堆栈上。外部赋值将发生在viewDidLoad、view将出现和所有view。。。功能。
但是在初始化之后,使用nibName等等。initWithNibName是视图的初始化,因此它将在初始化之前执行
如果您需要不同的接口(取决于x),为什么不在初始化中这样做呢
if(x == ...) {
CustomViewController vc = [[CustomViewController alloc] initWithNibName:@"CustomViewController1" bundle:nil];
} else {
CustomViewController vc = [[CustomViewController alloc] initWithNibName:@"CustomViewController2" bundle:nil];
}
无论如何,尝试一些断点,您将看到执行顺序。谢谢。我不想创建2个CustomViewController。因为两个视图控制器之间的差异并不大,所以同一个视图控制器具有不同的nib文件。是的,我指的是nib文件。x值可以定义几个不同的接口。(超过2)那么你可以按照我的建议做,还是不做?不,但多亏了你关于作业发生时间的回答。为什么我得到了负数?
if(x == ...) {
CustomViewController vc = [[CustomViewController alloc] initWithNibName:@"CustomViewController1" bundle:nil];
} else {
CustomViewController vc = [[CustomViewController alloc] initWithNibName:@"CustomViewController2" bundle:nil];
}