私のアプリUITextField
では、VC1(UIViewController
)を表示しています。テキストフィールドのテキストを変更すると、ビュー上で別のコントローラーVC2のプッシュを呼び出しUISearchBar
ます。imを押した後UISearchBar
、VC1からのテキストフィールドテキストにテキストを割り当てます。
xibで、私のテキストフィールドにはすでに「テスト文字列」というテキストがあります。
VC1テキストフィールドに任意の文字を追加すると、VC2がプッシュされ、検索バーのテキストは正常になります。
しかし、iPhoneキーボードのバックスペースキーを押すと、VC2が押され、検索フィールドのテキストが文字ごとに削除され始めますが、文字列全体は空になりません。これは、デリゲートメソッドが再帰的に呼び出されるために発生しました。
の動作を修正する方法はUISearchBar
?VC2が表示されたら、キーボードを開いた状態で検索バーをアクティブにする必要があります。それが主な状態です。確かに、私が[self.searchBar becomeFirstResponder]
すべてを削除する場合は正常に動作します。
ここにいくつかのコード:
@implementation ViewController1
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString * resultString = [textField.text stringByReplacingCharactersInRange:range withString:string];
ViewController2 * vc2 = [ViewController2 new];
[self.navigationController pushViewController:vc2 animated:YES];
[vc2 loadText: resultString];
return NO;
}
@end
@implementation ViewController2
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.searchBar becomeFirstResponder];
}
- (void) loadText: (NSString *) text
{
self.searchBar.text = text;
}
@end
問題のサンプルソースコード:http://yadi.sk/d/NJmTLot73_vrE