在父视图控制器中,我在视图加载时添加子视图控制器:
// In the parent
- (void) viewDidLoad
{
[super viewDidLoad];
self.tokenFieldViewController = [[TokenFieldViewController alloc] init];
[self addChildViewController:self.tokenFieldViewController];
[self.view addSubview:self.tokenFieldViewController.view];
self.tokenFieldViewController.view.frame = self.view.bounds;
[self.tokenFieldViewController didMoveToParentViewController:self];
}
本质上,这个子视图控制器在其视图中有一个文本字段:
// In the child
- (void) loadView
{
self.view = [[UIView alloc] init];
self.textField = [[UITextField alloc] initWithFrame:CGRectMake(0,0,99,99)];
[self.view addSubview:self.textField];
}
如果这样编码,则文本字段不可插入。也就是说,点击它不会将闪烁的光标放入其中。但是,当我在父viewDidAppear
中添加子视图控制器时,文本字段开始工作。我想知道如何为viewDidLoad
修复它,因为我需要子项的生命周期来匹配父项的生命周期。
答案 0 :(得分:0)
我怀疑你攻击的唯一问题是这一行:
self.tokenFieldViewController.view.frame = self.view.bounds;
在viewDidLoad
和viewDidAppear
之间,有许多事情正在发生。其中最大的是视图和子视图的度量。这发生在viewWillLoadSubviews
和viewDidLoadSubviews
之间。在viewDidLoadSubviews
之后,您不应指望有效尺寸。
覆盖viewDidLoadSubviews
并将您的行放入其中,如下所示:
- (void)viewDidLayoutSubviews {
self.tokenFieldViewController.view.frame = self.view.bounds;
}