我在让文本字段接受becomeFirstResponder指令时遇到问题。
我提供了一种在导航栏中创建标题的自定义机制。我有另一个视图控制器,它成功地使用了同样的技术。在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订单。有什么想法吗?文档中说:“只有当当前响应者可以退出first-responder status (canResignFirstResponder)并且新响应者可以成为first - responder时,响应者对象才会成为第一响应者”。
发布于 2013-06-09 08:55:27
您是否在告诉UITextField成为后台线程上的选择器?
[textField performSelectorOnMainThread:@selector(becomeFirstResponder) withObject:nil
waitUntilDone:YES];Rationale:在主线程以外的方法上调用UIKit方法(即更新视图)将不起作用。。这是有可能发生的。(不清楚从何处调用addTitleTextField方法)。
是否还有另一个急救人员需要一些时间来辞职?
[textField performSelectorOnMainThread:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];Rationale:如果另一个字段挂在first responder上(或正在辞职过程中),它将有时间清理辞职,直到下一个运行循环。。。。。通常,下一个运行循环将有足够的时间供前一个响应者清理,或者您可以尝试一个较短的延迟,如0.05。
发布于 2014-08-18 17:10:17
您可能需要添加textField以查看层次结构:
v.addSubview(textField)发布于 2018-07-22 03:27:40
另一件要做的事情是检查textField,确保被启用(检查接口生成器,然后检查您可能通过代码执行的任何禁用操作)。
我花了近一个小时试图找出问题所在:我通过将UITextField子类化并将canBecomeFirstResponder重写为always return true来解决问题。这迫使它最终显示键盘并编辑textField,但我注意到我无法点击/选择/复制/粘贴textField。启用了用户交互,然后我终于看到启用没有被选中...我指责Apple在禁用UI时没有显示任何视觉提示(就像do with Hidden)笑
https://stackoverflow.com/questions/17003057
复制相似问题