包含视图控制器的 UITextFieldDelegate
UITextFieldDelegate in containing View Controller
我在 UIViewController
中实现了一个容器视图,然后在其中放置了一个 UITableViewController
。此 table 包含包含几个 UITextField
的静态行。现在我想检测当其中一个文本字段是第一响应者时用户按下键盘上的 return 键 - 在包含视图控制器中而不是 table 视图控制器中。这可能吗,还是只能知道对象存在于控制器中?
我试图这样做,但没有调用 textFieldShouldReturn
。我在视图控制器的 .h 文件中符合 UITextFieldDelegate
,我实现了 textFieldShouldReturn
,为了设置文本字段的 delegate
,我在 [=] 中获得了对容器视图的引用18=] 然后将这些文本字段的 delegate
设置为 self
。 (我制作了它们 public 以便可以在包含的控制器中访问它们。)
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"Show Container View"]) {
if ([segue.destinationViewController isKindOfClass:[ContainerTableViewController class]]) {
self.ctvc = segue.destinationViewController;
self.ctvc.firstTextField.delegate = self;
self.ctvc.secondTextField.delegate = self;
}
}
}
为什么当我在键盘上按 return 时 textFieldShouldReturn
没有被调用?
Why isn't textFieldShouldReturn called when I hit return on the keyboard?
因为你不是文本域的委托人。反过来,那是因为您设置委托的时间过早。你是说:
self.ctvc.firstTextField.delegate = self;
self.ctvc.secondTextField.delegate = self;
但你在 prepareForSegue
中是这么说的。那时,ctvc
还没有加载它的视图,firstTextField
和 secondTextField
仍然是 nil。所以你这里的代码没有效果。
我在 UIViewController
中实现了一个容器视图,然后在其中放置了一个 UITableViewController
。此 table 包含包含几个 UITextField
的静态行。现在我想检测当其中一个文本字段是第一响应者时用户按下键盘上的 return 键 - 在包含视图控制器中而不是 table 视图控制器中。这可能吗,还是只能知道对象存在于控制器中?
我试图这样做,但没有调用 textFieldShouldReturn
。我在视图控制器的 .h 文件中符合 UITextFieldDelegate
,我实现了 textFieldShouldReturn
,为了设置文本字段的 delegate
,我在 [=] 中获得了对容器视图的引用18=] 然后将这些文本字段的 delegate
设置为 self
。 (我制作了它们 public 以便可以在包含的控制器中访问它们。)
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"Show Container View"]) {
if ([segue.destinationViewController isKindOfClass:[ContainerTableViewController class]]) {
self.ctvc = segue.destinationViewController;
self.ctvc.firstTextField.delegate = self;
self.ctvc.secondTextField.delegate = self;
}
}
}
为什么当我在键盘上按 return 时 textFieldShouldReturn
没有被调用?
Why isn't textFieldShouldReturn called when I hit return on the keyboard?
因为你不是文本域的委托人。反过来,那是因为您设置委托的时间过早。你是说:
self.ctvc.firstTextField.delegate = self;
self.ctvc.secondTextField.delegate = self;
但你在 prepareForSegue
中是这么说的。那时,ctvc
还没有加载它的视图,firstTextField
和 secondTextField
仍然是 nil。所以你这里的代码没有效果。