Iphone Can';t使用UITextView退出第一响应程序
我有一个Iphone Can';t使用UITextView退出第一响应程序,iphone,objective-c,cocoa-touch,uitextview,Iphone,Objective C,Cocoa Touch,Uitextview,我有一个UITextView。我实现了一个navigationBarUIBarButtonim来响应触摸,并辞去我的UITextView的第一响应者 但是,当调用选择器方法时,键盘不会被取消。我用isFirstResponder检查了UITextView的响应程序状态,它返回YES。我还用canResignFirstResponder检查了它,返回值是NO 我一定是错过了什么…为什么它没有返回 我知道我可以通过子类化UITextView来覆盖canResignFirstResponder,但如果
UITextView
。我实现了一个navigationBarUIBarButtonim
来响应触摸,并辞去我的UITextView
的第一响应者
但是,当调用选择器方法时,键盘不会被取消。我用isFirstResponder
检查了UITextView的响应程序状态,它返回YES。我还用canResignFirstResponder
检查了它,返回值是NO
我一定是错过了什么…为什么它没有返回
我知道我可以通过子类化UITextView来覆盖canResignFirstResponder
,但如果可能的话,我希望避免这种情况
下面是一段代码片段:
- (void) commentCancelButtonTouched:(id)sender
{
NSLog(@"Cancel button touched");
[self.navigationBar popNavigationItemAnimated: NO];
if ([self.textInput.textView canResignFirstResponder] == NO) {
NSLog(@"I don't want to resign!");
}
[self.textInput.textView resignFirstResponder];
}
通过UIView子类寻址UITextField有点不标准。如果我是你,我会直接从视图控制器内部控制UITextField。将其设置为视图控制器的合成属性,为其指定关键字IBOutlet,以便您可以在Interface Builder中讨论它,然后确保outlet连接到文本字段
换句话说,与其谈论
self.textInput.textView
,不如直接谈论self.textView
。再仔细检查一下你的IB插座连接,因为我怀疑这才是真正的问题所在。我找到了答案。我在“textInput”视图中有一个“UITextViewDelegate”方法,TextViewShoulDediting
,该方法被重写为返回否
。将其更改为YES
,解决了问题。如果有人想在您触摸文本视图外部时隐藏键盘,这很容易
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
[self.xFront resignFirstResponder];
}
xFront是我的
UITextView
什么是self.textInput
的类?它是一个自定义类,子类UIView
。感谢您的提示,尽管我没有使用Interface Builder进行查看,但它是通过编程完成的。明白了。更重要的是,在控制器和UITextField之间建立一个抽象层可能不是一个好主意。在我的textInput
视图中,我有一个UITextViewDelegate
方法,textViewShoulDediting
,该方法被重写为返回NO。将其更改为YES,解决了问题。啊!不过还是要谢谢你的建议。