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];
}