ドキュメントを閲覧しましたが、UISearchBarの色を変更するものが見つかりませんでした。誰かがそれを変更する方法を知っていますか?textColorプロパティはありません:/
どうも
ドキュメントを閲覧しましたが、UISearchBarの色を変更するものが見つかりませんでした。誰かがそれを変更する方法を知っていますか?textColorプロパティはありません:/
どうも
次のことができます: SearchBar から searchField プロパティを取得し、その textColor プロパティを変更します。
UITextField *searchField = [searchbar valueForKey:@"_searchField"];
searchField.textColor = [UIColor redColor]; //You can put any color here.
それでおしまい!これで、可能な方法で textField を操作できます。
この機能を追加するカテゴリは次のとおりです。
@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
この投稿で説明されている手法を使用できると思います
そこに示されているコードを少し変更して、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
AppearanceWhenContainedInは iOS 9 で非推奨になったため、iOS 9 以降では以下のメソッドを使用する必要があります。
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
setTintColor:[UIColor whiteColor]];
iOS 11 では、検索バーがナビゲーション バーの一部になることが期待されており、ご想像のとおり、あらゆる種類の新しい「機能」が追加されています。
これはバグだと思いますが、テキスト (およびキャンセル ボタン) の色を変更するには、次の手順を実行する必要があることがわかりました。
self.searchController.searchBar.barStyle = UISearchBarStyleMinimal;
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
setTintColor:[UIColor whiteColor]];
バースタイルを「デフォルト」のままにすると、色合いなどに関係なくテキストが黒くなることがわかりました。最小または目立つに設定すると、テキストが表示されました。
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
iOS 11 で を設定した後、searchController
内でいずれかのビアnavigationItem
を設定しようとしても影響がないことがわかりましたが、単に通常を呼び出すカスタムの外観プロパティは問題なく機能しました。textColor
UIAppearance
UITextField
UISearchBar
textColor
// 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;
UIDatePicker
PS同じトリックが、一見アクセスできないと思われるラベルに色を付けるのに役立ちましたUIPickerView