becomeFirstResponder无法在iOS 8中工作
我正在使用UITextField的方法becomeFirstResponder来显示键盘。 这是在iOS 7中工作。但在iOS 8中,此方法不显示键盘。becomeFirstResponder无法在iOS 8中工作
UITextField *txtAddNew = [[UITextField alloc] initWithFrame:CGRectMake(10,10,240, 21)];
txtAddNew.font = [UIFont fontWithName:@"Helvetica" size:16];
txtAddNew.clearButtonMode = UITextFieldViewModeWhileEditing;
txtAddNew.returnKeyType = UIReturnKeyDone;
txtAddNew.delegate = self;
txtAddNew.autocorrectionType = UITextAutocorrectionTypeNo;
txtAddNew.tag = 15;
// Open keyboard
[txtAddNew becomeFirstResponder];
有没有办法在iOS 8中做到这一点?
尝试调用becomeFirstResponder像下面
[txtAddNew performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0];
按照苹果,
Responder对象才成为第一个响应,如果当前 响应者辞职第一响应者状态(canResignFirstResponder) ,新的响应者可以成为第一响应者。
你可以调用这个方法来创建响应者对象,比如查看第一响应者 。但是,如果 是视图层次结构的一部分,则应该只在该视图上调用它。如果视图的窗口属性包含一个 UIWindow对象,则它已安装在视图层次结构中;如果它 返回nil,则该视图将从任何层次结构中分离出来。
在您的代码中添加此行。我希望它会工作
[txtAddNew performSelectorOnMainThread:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];
我想你错过了addsubview
的txtAddNew
到Mainview
txtAddNew.tag = 15;
[self.view addsubview:txtAddNew];
// Open keyboard
[txtAddNew becomeFirstResponder];
有时,它帮助先辞职第一响应者:
var tapGesture = UITapGestureRecognizer()
tapGesture.rac_gestureSignal().subscribeNext { [weak self] (_) -> Void in
self?.inputTextField.resignFirstResponder()
self?.inputTextField.becomeFirstResponder()
}
self.charViewsContainer.addGestureRecognizer(tapGesture)
这对我有用,是否有任何苹果文档,导致你这样做? – Austin 2017-09-18 23:11:17
对于iOS 9.3,以下为我工作:
private var searchTextFieldShouldReturn = false
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.searchTextFieldShouldReturn = false
self.searchTextField.becomeFirstResponder()
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
self.searchTextFieldShouldReturn = true
self.searchTextField.resignFirstResponder()
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
self.searchTextFieldShouldReturn = true
textField.resignFirstResponder()
return true
}
func textFieldShouldEndEditing(textField: UITextField) -> Bool {
return self.searchTextFieldShouldReturn
}
所以你需要确保你也实现了textFieldShouldEndEditing委托。
万一别人有同样的问题,因为我:
我有连接到我的UITextField
的IBOutlet
。错误地是我在我的viewDidLoad
方法中初始化了这个。那就是,[[textField alloc] init];
。我删除了这个,一切都恢复正常。
斯威夫特3
这里是SWIFT 3版接受的答案的。对于我来说,我也不得不延误。
txtAddNew.perform(
#selector(becomeFirstResponder),
with: nil,
afterDelay: 0.1
)
斯威夫特4和iOS 11
对我来说,没有什么母校我想,我是不是能够设置第一个响应者,直到我尝试这样做。
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if cell.isKind(of: YOURTABLEVIEWCELL.self) {
if let yourCell = cell as? YOURTABLEVIEWCELL{
yourCell.yourUiTextField.becomeFirstResponder()
}
}
}
希望这可以帮助别人坚持相同的问题。
我没有看到你将该文本框添加到任何视图作为子视图。 – 2014-11-24 05:12:50