0

关于这个话题似乎有很多。但我无法让任何解决方案发挥作用。

我的代码创建了一个tableView完整的具有不同内容的单元格(基于 JSON),用户应该在每个单元格中输入信息。我遇到的问题是,当用户点击单元格外部的某个位置(即在tableView背景上)时,我希望键盘关闭。

didSelectRowAtIndexPath:方法不好。

touchesBegan:根本不会触发(tableView启用了用户交互,但我认为还有其他原因)。

我已向 中添加了一个手势tableView,但随后我无法开始编辑。

我知道resignFirstResponder。但我不知道正在编辑哪个字段。所以我认为,我需要采用这种endEditing:方法。但是当用户在单元格之外触摸时,我就是无法调用它。

任何帮助将不胜感激。

4

3 回答 3

1

如果那是textField@JFS所说的,您可以delegate在下面的方法中设置并退出它。

- (BOOL)textFieldShouldReturn:(UITextField *)textField

否则,如果那是一个textView,您可以添加一个带有完成按钮的工具栏,然后退出您inputAccessoryView的.textViewtextView

我还有两个想法

坏主意:
尝试在单元格背景中制作一个不可见的按钮并添加一个动作方法来退出它。但是,当您didSelectRowAtIndexPath:使用UITableView.

好主意:(好一个)
UITableView肯定会有UIScrollview。所以在scrollViewDidScroll:方法中, set[self endEditing:YES]肯定会起作用。

好主意 2 创建一个新的VieworButton并将其放在所有视图的顶部,当 atextView正在编辑时,endEditing:当用户触摸视图或按钮时调用该方法。

要在 TABLEVIEW 中进行触摸检测:

其中一些问答将对您有所帮助。

https://stackoverflow.com/a/8787019/1083859

为什么我的 UITableView 没有响应 touchesBegan?

https://stackoverflow.com/a/8786706/1083859

于 2013-06-28T14:59:12.160 回答
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];
}

感谢所有的想法和帮助。

于 2013-07-01T14:16:51.333 回答
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 添加到我的子类单元格中,但发现这是不够的,并且在添加了这两件事之后,是多余的。

于 2014-01-30T20:55:56.287 回答