iphone - 如何检测在点击时关闭 UISearchDisplayController 的确切事件
<p><p>据我所知,一个事件的 <code>UISearchDisplayController</code> 可以在两种情况下被解除:</p>
<ol>
<li>当随时点击取消按钮时</li>
<li>当搜索文本字段为空并且搜索栏下方的灰色变暗区域为
点按。</li>
</ol>
<p>我能够通过 <code>searchBarCancelButtonClicked</code> 方法轻松检测到案例 1。至于案例 2,似乎没有任何委托(delegate)方法可以让我在点击时<strong>立即</strong>获得通知。</p>
<p>我实现了所有的委托(delegate)方法来研究调用的顺序,发现对于案例2,只触发了两个方法:</p>
<p>点击 --> <code>willUnloadSearchResultsTableView</code> --> <code>searchDisplayControllerDidEndSearch</code></p>
<p>但是,这两个事件仅在点击延迟后触发,而不是在立即点击事件时触发(后者是我真正需要的)。</p>
<p>为完整起见,以下是案例 1 的一系列事件:</p>
<p><code>searchBarCancelButtonClicked</code> --> <code>willHideSearchResultsTableView</code> --> <code>didHideSearchResultsTableView</code> --> <code>willUnloadSearchResultsTableView</code> --> <code> searchDisplayControllerDidEndSearch</code></p>
<p>有什么想法吗? </p>
<p>这个答案<a href="https://stackoverflow.com/questions/6212988/uipopovercontroller-dismiss-on-tap-off-how-do-i-detect-this-event" rel="noreferrer noopener nofollow">question</a>建议使用 <code>searchDisplayControllerDidEndSearch</code>,但对我来说为时已晚。出于好奇,我打算在取消搜索时<strong>立即</strong>将搜索文本值重置为以前的值。在 <code>willUnloadSearchResultsTableView</code> 或 <code>searchDisplayControllerDidEndSearch</code> 中实现此逻辑会在延迟设置文本时导致搜索栏中相当难看的闪烁。</p>
<p>谢谢!</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>尝试使用:
1.</p>
<pre><code>- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar;
</code></pre>
<p>此方法由 UISearchDisplayController 组合的 searchBar 调用。
<a href="https://stackoverflow.com/a/17210809/901508" rel="noreferrer noopener nofollow">But you need to define when to return YES/NO (hides first responder) very accurate.</a> </p>
<p>附:也许您需要将 searchBar 的委托(delegate)分配给自己。</p>
<p>2.</p>
<pre><code>- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller;
</code></pre>
<p>总是从这两种情况中调用。</p></p>
<p style="font-size: 20px;">关于iphone - 如何检测在点击时关闭 UISearchDisplayController 的确切事件,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/16793945/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/16793945/
</a>
</p>
页:
[1]