点击UITableView时resignFirstResponder?

时间:2009-10-19 23:41:14

标签: iphone uitableview uibutton uitextfield

我有一个UITableView,其中包含两个自定义单元格,每个单元格都有一个子视图,其中包含UITextField。我尝试在UIButton之上添加UITableView并将其设为resignFirstResponder,但这只是意味着您无法在其他任何地方点按 - 甚至在{{1}上也没有输入文字。

如果我在那两个UITextFields之外点击,我怎么能这样做,我可以调用resignFirstResponder,这样用户就可以回到其他单元格了?

由于

3 个答案:

答案 0 :(得分:2)

一个很好的简单方法是将UITableView子类化并实现触摸方法(之后不要忘记将它们传递给super!)。从那里你可以检查触摸开始的触摸,并决定它是否是UITextField中的触摸(使用UIView中的hitTest:方法)。如果hitTest没有返回UITextField,您可以调用控制器中的方法来重新签名第一个响应者。希望这能指出你正确的方向!

答案 1 :(得分:1)

我问过我发布的类似questionfound an answer myself。基本上,您可以在自定义UITableViewCell中覆盖hitTest:withEvent:,它可以让您检测单元格或表格视图中的任何其他单元格中发生触摸的时间。我提供了一个示例hitTest:方法,它复制了原始hitTest的功能:你可以添加你需要的东西。您可以像我一样在hitTest函数中添加resignFirstResponder,或者进一步自定义它。

答案 2 :(得分:-2)

当键盘显示时,只需使用-setFrame调整桌面视图的大小,使其位于键盘上方的可见区域,而不是尝试在字段外部点击以退出第一响应者。然后,您将能够将视图滚动到其他单元格。通过注册以下事件,可以通知您键盘可见:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillShow:)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];

然后实现keyboardWillShow:

- (void)keyboardWillShow:(NSNotification*)notification;
{
    [tableView setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 200.0f)];
}

最诚挚的问候。