今日の少し前に同じ問題に遭遇しました。これは、おそらく自分では使用しないであろう私の本当に醜い回避策です。
for(UIView *subView in searchBar.subviews) {
if([subView isKindOfClass: [UITextField class]]){
UITextField *searchField = (UITextField *)subView;
CGFloat myWidth = 26.0f;
CGFloat myHeight = 30.0f;
UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, myWidth, myHeight)];
[myButton setImage:[UIImage imageNamed:@"searchbariconclear"] forState:UIControlStateNormal];
[myButton setImage:[UIImage imageNamed:@"searchbariconclear"] forState:UIControlStateHighlighted];
[myButton addTarget:self action:@selector(clearsearchbar) forControlEvents:UIControlEventTouchUpInside];
searchField.rightView = myButton;
searchField.rightViewMode = UITextFieldViewModeAlways;
searchField.clearButtonMode = UITextFieldViewModeNever;
}
}
その後..
- (void)clearsearchbar {
for(UIView *subView in searchBar.subviews) {
if([subView isKindOfClass: [UITextField class]]){
UITextField *searchField = (UITextField *)subView;
searchField.text = nil;
}
}
}
このアプローチの 3 つの問題..
検索バーのサブビューの内部を掘り下げているため、OS の更新でいつの日か壊れる可能性があります。
これは、明確なアイコンが常に表示されるという点で、UISearchBarIconClear とまったく同じようには動作しません。このアプローチを使用して、他の UITextFieldViewModes でテストを試すことができる可能性があります。ここで、何らかの理由で。
私だけかもしれませんが、1 つの問題を解決しようとしたときに 2 つの問題を引き起こすようなものは、解決策ではないと思います。:-)
誰かがこの問題に取り組むためのより良い方法を持っているなら、私もそれを聞きたい.