[英]UITextView can't dismiss the keyboard in programmatically-created UITableView
在这个问题上似乎有很多。 但是我无法获得任何有效的解决方案。
我的代码创建了一个tableView
充满了不同内容的单元格(基于JSON),用户应在每个单元格中输入信息。 我遇到的问题是,当用户点击单元格外部的某个位置(即tableView
背景)时,我希望键盘关闭。
didSelectRowAtIndexPath:
方法不好。
touchesBegan:
完全不会触发( tableView
启用了用户交互,但是我认为还有其他原因)。
我已经向tableView
添加了一个手势,但是后来我无法开始编辑。
我知道resignFirstResponder
。 但是我不知道正在编辑哪个字段。 所以我认为,我需要使用endEditing:
方法。 但是当用户在单元格外部触摸时,我只是无法调用它。
任何帮助,将不胜感激。
如果这是@JFS所说的textField
,则可以在下面的此方法中设置delegate
并将其签名。
- (BOOL)textFieldShouldReturn:(UITextField *)textField
否则,如果这是一个textView
,你可以完成按钮的添加工具栏inputAccessoryView
你textView
和辞职您textView
。
我还有两个想法
馊主意:
尝试在单元格背景中创建一个不可见的按钮,并添加一个操作方法以将其辞职。 但这在您使用UITableView
didSelectRowAtIndexPath:
方法时会感到困惑。
好主意:(好主意)
UITableView
当然将具有UIScrollview
。 因此,在scrollViewDidScroll:
方法中,设置[self endEditing:YES]
肯定可以工作。
好点子2创建一个新的View
或Button
,并将其放置的所有意见,顶部当textView
是在编辑和调用endEditing:
方法当用户触摸视图或按钮。
在TABLEVIEW中获取触摸检测:
这些常见问答会为您提供帮助。
https://stackoverflow.com/a/8787019/1083859
好吧,经过大量的尝试设法弄清楚了(某物)之后,它不是很好,但是可以工作。
表格周围的大多数空隙都由节标题(小部分由单元格壁占据)弥补。 为了使这些区域能够调用方法,我向部分标题添加了一个手势,如下所示:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
NSString *sectionTitle = [self tableView:tableView titleForHeaderInSection:section];
if (sectionTitle == nil)
{
return nil;
}
UILabel *label = [[UILabel alloc] init];
label.frame = CGRectMake(20, 8, 320, 20);
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor colorWithRed:76/255.0 green:86/255.0 blue:108/255.0 alpha:255/255.0];
label.shadowColor = [UIColor grayColor];
label.shadowOffset = CGSizeMake(-0.0, 0.0);
label.font = [UIFont boldSystemFontOfSize:16];
label.text = sectionTitle;
UIView *view = [[UIView alloc] init];
[view addSubview:label];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(eventMenuTap)];
[view addGestureRecognizer:singleTap];
return view;
}
这也使我能够自定义每个部分的标签。 最终结果是,当滚动表时,如果在单元格(即标题)之外的任何地方(几乎)单击了任何地方,则我将关闭键盘,然后将调用eventMenuTap。
-(void)eventMenuTap
{
NSLog(@"Tap has begun...");
[self.view endEditing:YES];
}
感谢您的所有想法并为此提供帮助。
对于任何路人,我发现的最简单,最有效的解决方案需要两件事:
1:子类化表视图,并将以下内容添加到其.m中:
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// send your own dismiss message; you can use self.delegate to refer to TV's TVC...
[((SearchVC *)((UITableViewController *)self.delegate).parentViewController).searchBar resignFirstResponder];
// crucial!
[super touchesBegan:touches withEvent:event];
}
2:将以下内容添加到TVC:
- (void) scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
// send your own dismiss message...
[((SearchVC *)self.parentViewController).searchBar resignFirstResponder];
}
这对我来说效果很好。 我最初尝试将touchesBegan添加到我的子类化单元中,但是发现这是不够的,并且在添加了这两项之后,就显得多余了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.