12

ドキュメントを閲覧しましたが、UISearchBarの色を変更するものが見つかりませんでした。誰かがそれを変更する方法を知っていますか?textColorプロパティはありません:/

どうも

4

11 に答える 11

10

次のことができます: SearchBar から searchField プロパティを取得し、その textColor プロパティを変更します。

UITextField *searchField = [searchbar valueForKey:@"_searchField"];
searchField.textColor = [UIColor redColor]; //You can put any color here.

それでおしまい!これで、可能な方法で textField を操作できます。

于 2010-08-23T22:02:04.657 に答える
3

この機能を追加するカテゴリは次のとおりです。

@implementation UISearchBar (UISearchBar_TextColor)

- (UITextField *)field {
    // HACK: This may not work in future iOS versions
    for (UIView *subview in self.subviews) {
        if ([subview isKindOfClass:[UITextField class]]) {
            return (UITextField *)subview;
        }
    }
    return nil;
}

- (UIColor *)textColor {
    return self.field.textColor;
}

- (void)setTextColor:(UIColor *)color {
    self.field.textColor = color;
}

@end
于 2011-02-25T05:12:58.680 に答える
3

この投稿で説明されている手法を使用できると思います

そこに示されているコードを少し変更して、UISearchBar をサブクラス化します。

@interface SearchBar : UISearchBar {
}
@end

次に、実装で:

- (void)layoutSubviews {
    UITextField *searchField;
    NSUInteger numViews = [self.subviews count];
    for(int i = 0; i < numViews; i++) {
        if([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) {
            searchField = [self.subviews objectAtIndex:i];
        }
    }
    if(!(searchField == nil)) {
        searchField.textColor = [UIColor redColor];
    }

    [super layoutSubviews];
}

元の投稿のコードもこのコードもテストしていませんが、動作するはずです。-wkw

于 2009-11-07T16:09:41.963 に答える
2

AppearanceWhenContainedInは iOS 9 で非推奨になったため、iOS 9 以降では以下のメソッドを使用する必要があります。

[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
 setTintColor:[UIColor whiteColor]];
于 2016-08-11T10:08:36.440 に答える
1

iOS 11 では、検索バーがナビゲーション バーの一部になることが期待されており、ご想像のとおり、あらゆる種類の新しい「機能」が追加されています。

これはバグだと思いますが、テキスト (およびキャンセル ボタン) の色を変更するには、次の手順を実行する必要があることがわかりました。

self.searchController.searchBar.barStyle = UISearchBarStyleMinimal;
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
     setTintColor:[UIColor whiteColor]];

バースタイルを「デフォルト」のままにすると、色合いなどに関係なくテキストが黒くなることがわかりました。最小または目立つに設定すると、テキストが表示されました。

于 2017-09-24T20:07:41.853 に答える
0

David Foster (@david-foster) が提案したカテゴリを iOS 8 で動作するように変更しました。

static UITextField *PBFindTextFieldInView(UIView *view) {
    for(UIView *subview in view.subviews) {
        if([subview isKindOfClass:UITextField.class]) {
            return (UITextField *)subview;
        } else {
            UITextField* textField = PBFindTextFieldInView(subview);
            if(textField) {
                return textField;
            }
        }
    }
    return nil;
}

@implementation UISearchBar (Appearance)

- (UITextField *)field {
    return PBFindTextFieldInView(self);
}

- (UIColor *)textColor {
    return self.field.textColor;
}

- (void)setTextColor:(UIColor *)color {
    self.field.textColor = color;
}

@end
于 2015-03-16T15:40:59.413 に答える
0

iOS 11 で を設定した後、searchController内でいずれかのビアnavigationItemを設定しようとしても影響がないことがわかりましたが、単に通常を呼び出すカスタムの外観プロパティは問題なく機能しました。textColorUIAppearanceUITextFieldUISearchBartextColor

// Implement a custom appearance property via a UITextField category
@interface UITextField (SearchBarTextColor)

@property (nonatomic, strong) UIColor * textColorWorkaround UI_APPEARANCE_SELECTOR;

@end

@implementation UITextField (SearchBarTextColor)

- (UIColor *)textColorWorkaround {
    return self.textColor;
}

- (void)setTextColorWorkaround:(UIColor *)textColor {
    self.textColor = textColor;
}

@end

そして、次のように使用します。

UITextField *textFieldProxy = [UITextField appearanceWhenContainedInInstancesOfClasses:@[UISearchBar.class]];
textFieldProxy.textColorWorkaround = UIColor.lightGrayColor;

UIDatePickerPS同じトリックが、一見アクセスできないと思われるラベルに色を付けるのに役立ちましたUIPickerView

于 2017-11-03T05:46:47.793 に答える