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
。我实现了一个navigationBar
UIBarButtonim
来响应触摸,并辞去我的
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,解决了问题。啊!不过还是要谢谢你的建议。