如何通过外部点击来解雇UITextView?

时间:2012-01-31 14:00:20

标签: iphone

我对UITextView s有点怀疑。我用来放UITextField s,然后用忠实的老人敲击外面去掉键盘:

-(void)touchesEnded: (NSSet *)touches withEvent: (UIEvent *)event {
for (UIView* view in self.view.subviews) {
    if ([view isKindOfClass:[UITextField class]])
        [view resignFirstResponder];
}
}

我在我的视图中设置了这个UITextView(确切地说是self.myTV,并且我做了以下

-(void)touchesEnded: (NSSet *)touches withEvent: (UIEvent *)event {
for (UIView* view in self.view.subviews) {
    if ([view isKindOfClass:[UITextView class]])
        [view resignFirstResponder];
}
}

与上述相同,除了不同的班级......

好吧它似乎不起作用。有人有建议吗?

2 个答案:

答案 0 :(得分:4)

为当前第一个响应者的任何子视图重新签名第一响应者的简单方法是:

[self.view endEditing:NO];

或者,如果您想强制第一个响应者辞职而不先询问:

[self.view endEditing:YES];

答案 1 :(得分:2)

问题是,根据您应用的子视图层次结构,UITextView在您的情况下不是FirstResponder。

我建议你对UIView进行分类,找到第一个响应者:     UIView上的这个类别,它调用UIWindow和第一个响应者的跟踪。

@implementation UIView (FindAndResignFirstResponder)
- (BOOL)findAndResignFirstResponder
{
    if (self.isFirstResponder) {
        [self resignFirstResponder];
        return YES;     
    }
    for (UIView *subView in self.subviews) {
        if ([subView findAndResignFirstResponder])
            return YES;
    }
    return NO;
}
@end