7

UiControlStateNormal のカスタム UISearchBarIconClear を設定した UISearchBar があります。

[mySearchBar setImage:myImage forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal];

この部分は正常に機能しますが、残念ながらクリアボタンをタップすると、設定した画像から元のデフォルトの灰色の画像に変わります。

UIControlStateHighlighted の画像を設定しようとしましたが、どうやらうまくいきません。

ドキュメントには実際に記載されています

有効な状態は、UIControlStateNormal と UIControlStateDisabled です。

強調表示された状態に設定できない場合、カスタム ボタンを既定の状態に設定する意味は何ですか? 何か不足していますか?ご意見や回避策をよろしくお願いします。

4

4 に答える 4

2

アピアランス プロキシを使用するのはどうですか。

[[UIButton appearanceWhenContainedIn:[UITextField class], [UISearchBar class], nil] setImage:myImage forState:UIControlStateHighlighted];
于 2013-05-17T08:20:48.987 に答える
2

あなたが説明したのと同じ問題があり、クリアアイコンが押されるとデフォルトのアイコンにリセットされました。

これは、通常の状態と強調表示された状態の両方に同じ UIImage を使用しようとしていることが原因のようです。強調表示された状態で別の画像に切り替えると、問題が修正されました。

于 2013-07-12T20:29:01.070 に答える
0

今日の少し前に同じ問題に遭遇しました。これは、おそらく自分では使用しないであろう私の本当に醜い回避策です。

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 つの問題..

  1. 検索バーのサブビューの内部を掘り下げているため、OS の更新でいつの日か壊れる可能性があります。

  2. これは、明確なアイコンが常に表示されるという点で、UISearchBarIconClear とまったく同じようには動作しません。このアプローチを使用して、他の UITextFieldViewModes でテストを試すことができる可能性があります。ここで、何らかの理由で。

  3. 私だけかもしれませんが、1 つの問題を解決しようとしたときに 2 つの問題を引き起こすようなものは、解決策ではないと思います。:-)

誰かがこの問題に取り組むためのより良い方法を持っているなら、私もそれを聞きたい.

于 2013-02-08T13:32:44.267 に答える