我有一个文本字段显示在UITableViewCell中,我希望能够在用户触摸屏幕上除文本字段之外的任何其他位置时隐藏键盘。我知道[field resignFirstResponder];,但我不知道如何拦截UITableView背景上的触摸以调用“resignFirstResponder”。
非常感谢任何帮助。
答案 0 :(得分:3)
执行此操作的唯一方法是继承UITableView,在子类UITableView中实现touchesBegan方法,并将UITextField对象发送到UITableView。这是它应该是什么样子 -
// GRTableView.h
// StackOverflow Example
//
// Created by Raphael Caixeta on 8/13/10.
// Copyright 2010 Raphael Caixeta. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface GRTableView : UITableView <UITableViewDelegate> {
UITextField *textField;
}
@property(nonatomic, retain) UITextField *textField;
@end
//
// GRTableView.m
// StackOverflow Example
//
// Created by Raphael Caixeta on 8/13/10.
// Copyright 2010 Raphael Caixeta. All rights reserved.
//
#import "GRTableView.h"
@implementation GRTableView
@synthesize textField;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[textField resignFirstResponder];
[super touchesBegan:touches withEvent:event];
}
- (void)dealloc {
[super dealloc];
}
@end
然后在您将分配UITableView的常规文件中,只需分配子类视图并将文本字段传递给子类。希望有所帮助。
答案 1 :(得分:0)
尝试实施- (void)textFieldDidEndEditing:(UITextField *)textField
的{{1}}方法。
答案 2 :(得分:0)
这很简单:创建一个透明的UIView对象,接收你想要的区域中的触摸,当触摸在该视图的边界时,调用resignFirstResponder。
// somewhere in a view controller
UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
[self.view addSubview:backgroundView];
// in the touchesBegan:withEvent: method, for example
UITouch *touch = [[event allTouches] anyObject];
if ([field isFirstResponder] && [touch view] == backgroundView) {
[field resignFirstResponder];
}
或者,您可以跳过backgroundView的东西,只需在touchesBegan中添加如下所示的条件语句:withEvent:method:
UITouch *touch = [[event allTouches] anyObject];
if ([field isFirstResponder] && [touch view] != field) {
[field resignFirstResponder];
}
如果触摸的话! (不是)在field
的范围内,那么你想要删除键盘。
答案 3 :(得分:0)
您可以在以下条件下隐藏键盘,
在这两种情况下你应该放置[TxtFld resignFirstResponder];而当你的textfield工作结束时,你正在对该事件执行一些操作,你也应该写[TxtFld resignFirstResponder];其中TxtFld是UIText字段的对象。
通过使用这个东西键盘将被解雇。您正在编写的触摸方法可能无法在UITableviewCell上运行。所以这将是隐藏键盘的方法。
仍然不起作用然后指定确切的问题发生。
答案 4 :(得分:0)
有一种比标准的“子类UITableView”或“添加UIView的子类并处理触摸”更简单的方法。我创建了一个UIButton,在我想要处理触摸的区域上有一个清晰的背景颜色。当我将它添加到视图中时,我将其隐藏属性设置为YES。
当文本字段开始编辑时,我将按钮的隐藏属性设置为NO。
然后按钮只是在调用[textField resignFirstResponder]和button.hidden = YES的方法中响应UITouchUpInside控件事件。