我有一个文本字段在UITableViewCell中显示,我希望能够隐藏键盘时,用户触摸屏幕上除了文本字段以外的任何地方。我知道[field resignFirstResponder],但我不知道如何拦截UITableView背景上的触摸以调用“resignFirstResponder”。如何让键盘消失?
任何帮助将不胜感激。
我有一个文本字段在UITableViewCell中显示,我希望能够隐藏键盘时,用户触摸屏幕上除了文本字段以外的任何地方。我知道[field resignFirstResponder],但我不知道如何拦截UITableView背景上的触摸以调用“resignFirstResponder”。如何让键盘消失?
任何帮助将不胜感激。
要做到这一点的唯一方法是继承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,仅分配子类的观点和你的文本字段传递给子类。希望有所帮助。
尝试执行UITextFieldDelegate
的- (void)textFieldDidEndEditing:(UITextField *)textField
方法。
这很简单:创建一个透明的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:方法方法:
UITouch *touch = [[event allTouches] anyObject];
if ([field isFirstResponder] && [touch view] != field) {
[field resignFirstResponder];
}
如果触摸! (不)在field
的范围内,那么你想要删除键盘。
出于某种原因,我的touchesBegan方法没有被调用。有什么建议?我的视图和UITableView具有userInteractionEnabled和multipleTouchEnabled为YES。 – 2010-08-09 15:28:20
确保touchesBegan:withEvent:方法具有正确的签名,并且在UIViewController中实现,而不是在视图本身中实现。 – 2010-08-09 15:36:42
您可以隐藏键盘在下列情况下,
在这两种情况下,您应该放置[TxtFld resignFirstResponder];而且当你的文本框工作结束时,你正在对该事件执行一些操作,你也应该写[TxtFld resignFirstResponder];其中TxtFld是UIText字段的对象。
通过使用这个东西,键盘将被解雇。您正在编写的触摸方法可能无法在UITableviewCell上工作。所以这将是隐藏关键板的方式。
它仍然不起作用,然后指定确切的问题发生。
有一种比标准的“子类UITableView”或“添加UIView的子类和处理触摸”更简单的方法。我在我想处理触摸的区域上创建一个具有清晰背景色的UIButton。当我将它添加到视图中时,我将其隐藏属性设置为YES。
当文本字段开始编辑时,我将按钮的隐藏属性设置为NO。
然后该按钮只是响应UITouchUpInside控件事件,在调用[textField resignFirstResponder]和button.hidden = YES的方法中。
这不是“唯一的做法”。请参阅列表中的其他有效答案。 – 2010-08-20 12:29:32
亲自尝试一下。你会看到点击UITableView的“背景”将被阻止。如果其他例子有效,你是否真的认为我会创建一个例子? – 2010-08-20 15:13:13