上にがありUITableView
、UISearchBar
特定の要件が機能していません。
私はキャンセルボタンを持っていないので、既存の検索をキャンセルするUISearchBar (showsCancelButton = NO)
には、x に完全に依存しています。UISearchBar
キーボードを閉じるには、キーボードの「検索」ボタンを使用します (ただし、私の場合は [完了] と呼ばれます)。
navigation bar button
ユーザーがアプリで検索すると、ユーザー エクスペリエンスが低下するため、アイテムを無効にします。検索がキャンセルされた場合にのみ、ユーザーはナビゲーション バー ボタンのアイテムを元に戻します。それはすべて働いています。
ただし、回避できない特定のシナリオが1つあります。
1) 検索バーをタップしてテキストを入力します
2) キーボードの [DONE] をクリックすると、キーボードが消えます
3) キーボードを手放すと、x はUISearchBar
4) の x をタップするUISearchBar
と、 のテキストがSearchBar
消え、表示が更新されます
5) この時点で、ナビゲーション バー ボタンが再び有効になるはずですが、有効になっていません。
コード:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
self.timelineSearchBar.showsCancelButton = NO;
if ([searchText length] == 0)
{
[self.timelineSearchBar performSelector:@selector(resignFirstResponder)
withObject:nil
afterDelay:0];
}
上記のコードは、xが押されたときにキーボードを閉じることを意図していることを知っています。これは問題ありません。
私の場合、キーボードは既に破棄されているため、x をタップしてナビゲーション バーの項目を再度有効にします。
self.addButton.enabled = YES;
上記の if ステートメントは何も実行せず、ナビゲーション バーの項目は無効のままです。
その if ステートメントで試したこともあります:
[self.timelineSearchBar performSelector:@selector(enableAdd)
withObject:nil
afterDelay:0];
- (void)enableAdd
{
self.addButton.enabled = YES;
}
しかし、searchBar がその enableAdd セレクターに応答しないと言ってクラッシュします。
ブレークポイントを作成し、x をタップすると上記の if ステートメントが true と評価され、ステートメントに入ることがわかります。コードを「実行」してボタンを有効にしますが、決して起こりません。
また、私の最後の編集方法は次のとおりです。
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
[searchBar setShowsCancelButton:NO animated:YES];
self.addButton.enabled = YES;
}
更新:私はここでリンクを試しましたhttp://engineeringtheworld.wordpress.com/2011/04/11/detecting-when-clear-is-clicked-in-uisearchbar-x-button/成功しませんでした-textFieldのshouldClearメソッドは呼び出されません。私は iOS 7 を使用しているので、ビューを textFields に埋め込む別の方法があるのではないでしょうか? これは正しいアプローチである可能性が非常に高いですが、サンプルの for ステートメントが true として評価されないため (NSLog に入れました)、私のコードでは機能しません。
更新 2: 上記の if ステートメントから、searchBarCancelButton メソッドを呼び出したところ、極端なループが発生したため、もちろん正しいアプローチではありませんでした:
[self performSelector:@selector(searchBarCancelButtonClicked:) withObject:self.timelineSearchBar afterDelay: 0];
これに関するガイダンスをいただければ幸いです。重要なステップが欠けていることはわかっていますが、それを完全に理解することはできません。