0

在父视图控制器中,我在视图加载时添加了一个子视图控制器:

// 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,因为我需要孩子的生命周期与父母的生命周期相匹配。

4

1 回答 1

0

我怀疑您对窃听的唯一问题是这一行:

self.tokenFieldViewController.view.frame = self.view.bounds;

之间viewDidLoadviewDidAppear很多事情发生。其中最大的是视图和子视图的测量。这发生在viewWillLoadSubviews和之间viewDidLoadSubviews。你不应该指望有效的尺寸,直到之后viewDidLoadSubviews

覆盖viewDidLoadSubviews并将您的行放入其中,如下所示:

- (void)viewDidLayoutSubviews {
    self.tokenFieldViewController.view.frame = self.view.bounds;
}
于 2013-10-02T01:30:21.773 回答