如何在viewDidLoad中添加UITextField时做出响应?

时间:2013-10-02 00:58:10

标签: iphone cocoa-touch uiviewcontroller uitextfield

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

// 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修复它,因为我需要子项的生命周期来匹配父项的生命周期。

1 个答案:

答案 0 :(得分:0)

我怀疑你攻击的唯一问题是这一行:

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

viewDidLoadviewDidAppear之间,有许多事情正在发生。其中最大的是视图和子视图的度量。这发生在viewWillLoadSubviewsviewDidLoadSubviews之间。在viewDidLoadSubviews之后,您不应指望有效尺寸。

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

- (void)viewDidLayoutSubviews {
    self.tokenFieldViewController.view.frame = self.view.bounds;
}