Hua*_*ing 102 uitableview uikeyboard ios
我有一个UITableView
与UITextField
S作为细胞.当UITableView
触摸背景时,我想解除键盘.我试图通过创建一个UIButton
大小UITableView
并将其放在后面来做到这一点UITableView
.唯一的问题是,UIButton
即使触摸在UITableView上,也能捕获所有触摸.我究竟做错了什么?
谢谢!
mix*_*xja 198
这可以通过创建UITapGestureRecognizer对象轻松完成(默认情况下,这将在单击时检测"手势",因此无需进一步自定义),指定触发手势时的目标/动作,然后附加手势识别器对象到你的表视图.
也许在你的viewDidLoad
方法中:
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
[self.tableView addGestureRecognizer:gestureRecognizer];
Run Code Online (Sandbox Code Playgroud)
和hideKeyboard
方法可能是这样的:
- (void) hideKeyboard {
[textField1 resignFirstResponder];
[textField2 resignFirstResponder];
...
...
}
Run Code Online (Sandbox Code Playgroud)
请注意,触摸UITextField
对象内部时不会触发手势.它虽然在UITableView
背景,页脚视图,标题视图和UILabels
内部单元格等上被触发.
小智 126
如果设置:UITapGestureRecognizer解决方案适用于表格单元格选择:
gestureRecognizer.cancelsTouchesInView = NO;
Run Code Online (Sandbox Code Playgroud)
Saa*_*aad 61
这是最好的方法.就这样做吧
[self.view endEditing:YES];
Run Code Online (Sandbox Code Playgroud)
要么
[[self.tableView superView] endEditing:YES];
Run Code Online (Sandbox Code Playgroud)
Raj*_*ain 22
作为UITableView
子类UIScrollView
,下面实现一个委托方法提供了一个非常简单,快速的解决方案.甚至不需要参与,resignFirstResponder
因为视图层次结构内省并找到当前响应者并要求它重新签署响应者状态.
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self.view endEditing:YES];
}
Run Code Online (Sandbox Code Playgroud)
并记得添加UIScrollViewDelegate
到头文件.
bbe*_*ord 13
首先,听scrollViewWillBeginDragging
你UIViewController
的加入UIScrollViewDelegate
:
在.h文件中:
@interface MyViewController : UIViewController <UIScrollViewDelegate>
Run Code Online (Sandbox Code Playgroud)
在.m文件中:
- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView {
[self dismissKeyboard];
}
Run Code Online (Sandbox Code Playgroud)
然后听其他互动:
- (void)setupKeyboardDismissTaps {
UISwipeGestureRecognizer *swipeUpGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipeUpGestureRecognizer.cancelsTouchesInView = NO;
swipeUpGestureRecognizer.direction = UISwipeGestureRecognizerDirectionUp;
[self.tableView addGestureRecognizer:swipeUpGestureRecognizer];
UISwipeGestureRecognizer *swipeDownGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipeDownGestureRecognizer.cancelsTouchesInView = NO;
swipeDownGestureRecognizer.direction = UISwipeGestureRecognizerDirectionDown;
[self.tableView addGestureRecognizer:swipeDownGestureRecognizer];
UISwipeGestureRecognizer *swipeLeftGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipeLeftGestureRecognizer.cancelsTouchesInView = NO;
swipeLeftGestureRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
[self.tableView addGestureRecognizer:swipeLeftGestureRecognizer];
UISwipeGestureRecognizer *swipeRightGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipeRightGestureRecognizer.cancelsTouchesInView = NO;
swipeRightGestureRecognizer.direction = UISwipeGestureRecognizerDirectionRight;
[self.tableView addGestureRecognizer:swipeRightGestureRecognizer];
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
tapGestureRecognizer.cancelsTouchesInView = NO;
[self.tableView addGestureRecognizer:tapGestureRecognizer];
}
Run Code Online (Sandbox Code Playgroud)
然后执行dismissKeyboard
:
- (void)dismissKeyboard {
NSLog(@"dismissKeyboard");
[yourTextFieldPointer resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)
如果像我一样,你想在自定义表格单元格中关闭UITextField的键盘:
- (void)dismissKeyboard {
NSLog(@"dismissKeyboard");
CustomCellClass *customCell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
[customCell.textFieldInCell resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助任何人搜索!!
我是这样做的:
在TableViewController中创建一个方法来停用第一个响应者(在那个时候是你的TextBox)
- (BOOL)findAndResignFirstResonder:(UIView *)stView {
if (stView.isFirstResponder) {
[stView resignFirstResponder];
return YES;
}
for (UIView *subView in stView.subviews) {
if ([self findAndResignFirstResonder:subView]) {
return YES;
}
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
在tableView:didSelectRowAtIndexPath:
调用前一个方法:
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
...
[self findAndResignFirstResonder: self.view];
...
}
Run Code Online (Sandbox Code Playgroud)
小智 7
这是您的编码乐趣的快速版本:
它添加了一个轻敲手势识别器然后解除键盘.不需要TextField的插座!
override func viewDidLoad() {
super.viewDidLoad()
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "handleTap:"))
}
func handleTap(sender: UITapGestureRecognizer) {
if sender.state == .Ended {
view.endEditing(true)
}
sender.cancelsTouchesInView = false
}
Run Code Online (Sandbox Code Playgroud)
有Swift 3版本,没有阻止单元格上的点击。
在viewDidLoad()
方法中:
let dismissKeyboardGesture = UITapGestureRecognizer(target: self, action: #selector(hideKeyboard))
dismissKeyboardGesture.cancelsTouchesInView = false
tableView.addGestureRecognizer(dismissKeyboardGesture)
Run Code Online (Sandbox Code Playgroud)
而且hideKeyboard
是这样的:
func hideKeyboard() {
view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我有一个UITableViewController
实施touchesBegan:withEvent:
并没有为我工作.
这是有效的:
迅速:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)
Objective-C的:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self.view endEditing:YES];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
82682 次 |
最近记录: |