无法使用UITextView resignFirstResponder

时间:2010-06-03 05:47:14

标签: iphone objective-c cocoa-touch uitextview

我有UITextView。我实施了一个navigationBar UIBarButtonItem来响应触摸并辞退我的UITextView的第一个应答器。

但是,当调用选择器方法时,键盘不会被解除。我用isFirstResponder检查了UITextView的响应者状态,然后返回YES。我还用canResignFirstResponder检查了它,返回值为NO。

我必须在这里遗漏一些东西......为什么它会返回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];
}

3 个答案:

答案 0 :(得分:5)

万一有人想要在文本视图外触摸时隐藏键盘,这很容易......

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];

    [self.xFront resignFirstResponder];
}

xFront是我UITextView的出口。

答案 1 :(得分:3)

通过UIView子类寻址您的UITextField有点不标准。如果我是你,我会直接从视图控制器内部直接处理UITextField。将其设置为视图控制器的综合属性,为其提供关键字IBOutlet,以便您可以在Interface Builder中进行讨论,然后确保将插座连接到文本字段。

换句话说,您不想谈论self.textInput.textView,而是直接谈论self.textView。并仔细检查你的IB插座连接,因为我怀疑这是真正的麻烦所在。

答案 2 :(得分:1)

我明白了。我的'textInput'视图中有一个'UITextViewDelegate'方法,textViewShouldEndEditing被覆盖以返回NO。将其更改为YES并解决了问题。