iOSのUIsearchBar検索ボックスコンポーネントの基本使用ガイド
上記のニーズを実現するためには、UIsearchBarのサブクラスをLSSearchBarと書くとよいでしょう.
LSSearchBar.h以下:
#import
@interface LSSearchBar : UISearchBar
@end
LSSearchBar.mは以下の通りである.
#import "LSSearchBar.h"
@implementation LSSearchBar
- (void)layoutSubviews {
[super layoutSubviews];
// self.subviews searchField
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];
}
}
// searchField,
if (searchField == nil) {
NSArray *arraySub = [self subviews];
UIView *viewSelf = [arraySub objectAtIndex:0];
NSArray *arrayView = [viewSelf subviews];
for(int i = 0; i < arrayView.count; i++) {
if([[arrayView objectAtIndex:i] isKindOfClass:[UITextField class]]) {
searchField = [arrayView objectAtIndex:i];
}
}
}
if(!(searchField == nil)) {
//
searchField.textColor = [UIColor whiteColor];
//
[searchField setBackground: [UIImage imageNamed:@"searchbar"] ];
[searchField setBorderStyle:UITextBorderStyleNone];
// placeholder
[searchField setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];
// searchField
UIImage *image = [UIImage imageNamed:@"search"];
UIImageView *iView = [[UIImageView alloc] initWithImage:image];
iView.frame = CGRectMake(0, 0, 15, 15);
searchField.leftView = iView;
}
}
@end
UIsearchBarの背景色を変更するISearchBarは2つのsubViewからなり、1つはUIsearchBarBackGroupで、もう1つはUItextFieldです.IBにバックグラウンドを直接操作しない属性を指定します.UISearchBarBackGroundを直接削除する方法
seachBar=[[UISearchBar alloc] init];
seachBar.backgroundColor=[UIColor clearColor];
for (UIView *subview in seachBar.subviews){
if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
[subview removeFromSuperview];
break;
}
}
UIsearchBar文字の色が1.iOSの7アクセステキストフィールドでは、より多くのことを水平に再確認する必要があります.コードを変更するには
for (UIView *subView in self.searchBar.subviews)
{
for (UIView *secondLevelSubview in subView.subviews){
if ([secondLevelSubview isKindOfClass:[UITextField class]])
{
UITextField *searchBarTextField = (UITextField *)secondLevelSubview;
//set font color here
searchBarTextField.textColor = [UIColor blackColor];
break;
}
}
}
または設定可能なtintcolorはsearch barでキーに適用されます.tintColorを使用してシェーディングの前景にbartintColorを使用してシェーディングするバーの背景を使用します.iOSシステムV 7において.0,のUIViewのサブクラス派生ベースクラス挙動tintColor.見てtintColorはUIViewのレベルのアップルのファイルのために
2.文字の色を設定することで
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor blueColor]];
3.これは本当ですが、UIAppearanceプロトコルは「公開API」です.これは本当ではありません.UITextFieldのサポートです.見てごらんh文字列「UI_APPEARANCE_SELECTOR」を検索すると、この文字列のインスタンスが表示されます.もしあなたが見たらNetでは、UIAppearance APIが正式にサポートしている属性が少なくありません.これは周知のように、UITExtFieldはサポートされていないUIAPIなので、サンディップでの答えコードは常に実行可能ではなく、実際には最善の方法ではありません.これは投稿のリンクです.正しい方法は、サブビュー(または、サブビューが主にIOS 7のサブビューに使用される)と手動設定です.そうでないと、信頼できない結果になります.ただし、カテゴリのUIsearchBarを作成し、setTextColor:(*のUIcolor)の例を追加することができます.
- (void)setTextColor:(UIColor*)color
{
for (UIView *v in self.subviews)
{
if([Environment isVersion7OrHigher]) //checks UIDevice#systemVersion
{
for(id subview in v.subviews)
{
if ([subview isKindOfClass:[UITextField class]])
{
((UITextField *)subview).textColor = color;
}
}
}
else
{
if ([v isKindOfClass:[UITextField class]])
{
((UITextField *)v).textColor = color;
}
}
}
}
UIsearchBarの背景図をカスタマイズ
- (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 whiteColor];
[searchField.leftView setHidden:YES];
[searchField setBackground: [UIImage imageNamed:@"SearchBarBackground.png"] ];
[searchField setBorderStyle:UITextBorderStyleNone];
}
[super layoutSubviews];
}