我在让文本字段接受成为FirstResponder 指令时遇到问题。
我提供了一种自定义机制来在导航栏中创建标题。我有另一个视图控制器成功地使用了相同的技术。在 viewDidAppear 上我触发:
- (void)addTitleTextField
{
CGRect textFrame = self.parentViewController.navigationController.navigationBar.frame;
textFrame.size.width = 300.0;
textFrame.origin.y = (768.0 - 300.0)/2;
textFrame.size.height = 30.0;
textFrame.origin.x = 7.0;
self.titleTextField = [[UITextField alloc] initWithFrame:textFrame];
self.titleTextField.placeholder = NSLocalizedString(@"New Multiple Choice Quiz", @"New Multiple Choice Quiz");
self.titleTextField.borderStyle = UITextBorderStyleRoundedRect;
self.titleTextField.font = [UIFont boldSystemFontOfSize:20.0];
self.titleTextField.textAlignment = NSTextAlignmentCenter;
self.titleTextField.backgroundColor = [UIColor whiteColor];
self.titleTextField.textColor = [UIColor blackColor];
self.titleTextField.delegate = self;
[self.titleTextField setAutocorrectionType:UITextAutocorrectionTypeNo];
self.titleTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
[self.titleTextField setAutocapitalizationType:UITextAutocapitalizationTypeNone];
self.activeTextField = self.titleTextField;
self.parentViewController.navigationItem.titleView = self.titleTextField;
[self.titleTextField becomeFirstResponder];
}
self.titleTextField 将允许我设置文本值,但如果您使用 canBecomeFirstResponder 检查它会返回 NO。正如你所看到的,我在parentViewController 上设置了这个。我尝试使用委托来尝试让parentViewController 来设置它。当我执行委托并检查 textField 是否 canBecomeFirstResponder 时,它返回 YES,但我仍然无法使其接受 firstResponder 订单。有任何想法吗?文档说“如果当前响应者可以放弃第一响应者状态(canResignFirstResponder)并且新响应者可以成为第一响应者,则响应者对象仅成为第一响应者”。
您是否告诉 UITextField 成为后台线程上的选择器?
[textField performSelectorOnMainThread:@selector(becomeFirstResponder) withObject:nil
waitUntilDone:YES];
基本原理:在主线程以外的方法上调用 UIKit 方法(即更新视图)将不起作用。 。这可能正在发生。 (尚不清楚 addTitleTextField 方法是从哪里调用的)。
是否还有其他急救人员需要一些时间才能辞职?
[textField performSelectorOnMainThread:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];
基本原理:如果另一个字段挂在第一响应程序上(或正在放弃它),它将给它时间来清理放弃,直到下一个运行循环。 。 。 。 。通常下一个运行循环将有足够的时间让前一个响应者进行清理,或者您可以尝试像 0.05 这样的短暂延迟。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)