这个问题似乎很多。但我无法让任何解决方案奏效。
我的代码创建了一个tableView
个包含不同内容的单元格(基于JSON),用户应该在每个单元格中输入信息。我遇到的问题是,当用户点击单元格外的某个地方时(即在tableView
背景上),我希望键盘解除。
didSelectRowAtIndexPath:
方法不好。
touchesBegan:
根本没有激活(tableView
启用了用户互动,但我认为还有其他原因。)
我已向tableView
添加了一个手势,但我无法开始编辑。
我知道resignFirstResponder
。但我不知道正在编辑哪个字段。所以我想,我需要采用endEditing:
方法。但是当用户触摸到一个单元格外时,我就无法调用它。
任何帮助都会受到赞赏。
答案 0 :(得分:1)
如果这是textField
,如@JFS所说,您可以设置delegate
并在下面的方法中重新签名。
- (BOOL)textFieldShouldReturn:(UITextField *)textField
否则如果是textView
,您可以将inputAccessoryView
的完成按钮工具栏添加到textView
并重新设置textView
。
我有两个更多想法
糟糕的想法:
尝试在单元格背景中创建一个不可见的按钮,并添加一个操作方法来重新签名。但是当您使用didSelectRowAtIndexPath:
的{{1}}方法时,这会让您感到困惑。
好主意:(好的)
UITableView
肯定会有UITableView
。因此,在UIScrollview
方法中,设置scrollViewDidScroll:
肯定会有用。
好主意2
创建新的[self endEditing:YES]
或View
并将其置于所有视图之上,当Button
处于编辑状态时,并在用户触摸视图或按钮时调用textView
方法
在TABLEVIEW中获取触控功能
其中一些Q& A会帮助你。
https://stackoverflow.com/a/8787019/1083859
答案 1 :(得分:0)
好的,经过大量的游戏,可以想象出来的东西,但这并不好,但是很有效。
表格周围的大多数间隙都被部分标题占用(细胞壁的一小部分)。为了让这些区域调用方法,我在这个节标题中添加了一个手势;
-(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];
}
感谢所有的想法和帮助。
答案 2 :(得分:0)
对于任何路人,我发现的最简单,最有效的解决方案需要两件事:
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添加到我的子类化细胞中,但发现这是不够的,在添加这两个东西之后,这是多余的。