菜鸟教程小白 发表于 2022-12-13 11:39:37

ios - 检测对 UITableView 空白区域的点击


                                            <p><p>我有一个 UIViewController,它下面有一个 UITextFiled 和一个 UITableView。我在 UITableView 上使用 UITextField 作为搜索框。</p>

<p>当我在 UITextField 内点击时,虚拟键盘会出现,当我点击 UITableView 的任何区域时,我希望它消失。当用户点击 UITableView 和 UITextField 以外的任何区域时,键盘也应该消失。如果键盘不可见并且用户点击了任何 UITableViewCell,那么我需要打开另一个 UIViewController。</p>

<p>这就是它的样子。</p>

<p> <a href="/image/eJQOf.png" rel="noreferrer noopener nofollow"><img src="/image/eJQOf.png" alt="enter image description here"/></a> </p>

<p><strong>当前实现:</strong>
我正在使用 UITapGestureRecognizer 来检测点击位置。另外我正在使用 shouldReceiveTouch 来查找触摸是否在 UITableView 上。如果是,那么我返回 NO,这意味着我忽略了 UITableView 上的触摸。如果不是,那么我将返回 YES 并在 UITapGestureRecognizer 处理程序中通过调用来关闭键盘</p>

<pre><code>    ;
</code></pre>

<p><strong>现在我面临的问题是:</strong>当我的 UITableView 没有足够的数据并且它只显示 1 或 2 个单元格时,在这种情况下,我希望在我点击时关闭键盘UITableView 的空白区域,但不会因为点击在 UITableView 上,并且 shouldReceiveTouch 将返回 NO 并忽略触摸。</p>

<p><strong>注意</strong> 我首先实现 shouldReceiveTouch 的原因是我希望在用户点击任何单元格时自动调用 didSelectRowAtIndexPath 函数。这只有在我忽略 UITableView 上的 Tapgesture 时才有可能。</p>

<p>我尝试了另一种方法,其中我没有实现 shouldReceiveTouch 并且在每次点击时我都调用 UITapGestureRecognizer 处理程序并检测触摸是否在 UITableView 内。在那种情况下,我没有得到被点击的正确行索引。这就是我实现它的方式:</p>

<pre><code>-(void)dismissKeyboard:(UITapGestureRecognizer *)tap
{
   if()
   {
         ;
         return;
   }

   CGPoint location = ;

   if(touchedOutsideUITableView)
   return;

   NSIndexPath *path = ;

   if(path)
   {
   // user taps on existing row
   ;
   }
   else
   {
   // handle tap on empty area of UITableView
   }
}
</code></pre>

<p>有人可以告诉我如何在当前的实现中检测 UITableView 空白区域的点击吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果只保留您的 UITapGestureRecognizer 而将 cancelsTouchesInView 设置为 NO 会怎样?默认是YES</p>

<p>这样,当您点击任何单元格时,您的 didSelectRowAtIndexPath 方法仍然会被调用。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 检测对 UITableView 空白区域的点击,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/33528580/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/33528580/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 检测对 UITableView 空白区域的点击