見た目を変えたいUISearchBar
:だから、
UITextField
(検索のカスタムバックグラウンドで)自分の機能を次のように機能させる方法がある場合はどうすれば よいUISearchBar
ですか?または、サブクラス化してオーバーライドすること- (void)layoutSubviews
が唯一の方法ですか?
サブクラス化する方法を教えてください!!!
見た目を変えたいUISearchBar
:だから、
UITextField
(検索のカスタムバックグラウンドで)自分の機能を次のように機能させる方法がある場合はどうすれば よいUISearchBar
ですか?または、サブクラス化してオーバーライドすること- (void)layoutSubviews
が唯一の方法ですか?
サブクラス化する方法を教えてください!!!
UISearchBar
この以下のコードを使用して背景を変更できます。
for (UIView *subview in searchBar.subviews) {
if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
UIView *bg = [[UIView alloc] initWithFrame:subview.frame];
bg.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"SkyBackground.jpeg"]];
[searchBar insertSubview:bg aboveSubview:subview];
[subview removeFromSuperview];
break;
}
}
このコードから、の背景に画像などを設定できますUISearchBar
。
検索バーコンポーネントのレイアウトを変更する他の機能を備えたこの回答も参照してください。iOSでUISearchBarコンポーネントの背景色の内側を変更する方法
アップデート:
キャンセルボタンの外観を変更するには、次のコードを使用してください...
UIButton *cancelButton = nil;
for(UIView *subView in searchBar.subviews)
{
if([subView isKindOfClass:[UIButton class]])
{
cancelButton = (UIButton*)subView;
//do something here with this cancel Button
}
}
UITextFieldDelegatesを使用することも可能です
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString *searchString;
if (string.length > 0) {
searchString = [NSString stringWithFormat:@"%@%@",textField.text, string];
} else {
searchString = [textField.text substringToIndex:[textField.text length] - 1];
}
NSPredicate *filter = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", searchString];
resultArray = [[resultTempArray filteredArrayUsingPredicate:filter] mutableCopy];
if (!searchString || searchString.length == 0) {
resultArray = [resultTempArray mutableCopy];
} else {
if (resultArray.count == 0) {
NSLog(@"No data From Search");
}
}
[tableView reloadData];
return YES;
}
UItextfieldデリゲートメソッドを使用したフィルタリング
#pragma mark - UITEXTFIELD DELEGATE METHODS -
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return YES;
}
- (BOOL)textFieldShouldClear:(UITextField *)textField{
arrFilterSearch = nil;
arrFilterSearch = [NSMutableArray arrayWithArray:arrSearch];
UITableView *tblView = (UITableView *)[self.view viewWithTag:tblView_Tag];
[tblView reloadData];
return YES;
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString *searchKey = [textField.text stringByAppendingString:string];
arrFilterSearch = nil;
searchKey = [searchKey stringByReplacingCharactersInRange:range withString:@""];
if (searchKey.length) {
NSPredicate *pred = [NSPredicate predicateWithFormat:@"firstname contains[cd] %@", searchKey];
arrFilterSearch = [NSMutableArray arrayWithArray:[arrSearch filteredArrayUsingPredicate:pred]];
}
else
arrFilterSearch = [NSMutableArray arrayWithArray:arrSearch];
UITableView *tblView = (UITableView *)[self.view viewWithTag:tblView_Tag];
[tblView reloadData];
return YES;
}
これを試して
self.TextFieldSearch = (UITextField *)[self.Search.subviews lastObject];
[self.TextFieldSearch removeFromSuperview];
[self.view addSubview:self.TextFieldSearch];
self.TextFieldSearch.delegate = self;
self.TextFieldSearch.font = [UIFont systemFontOfSize:10];
self.TextFieldSearch.keyboardAppearance = UIKeyboardAppearanceAlert;
[self.Search removeFromSuperview];
UIsearchBarの背景を変更することは、カスタマイズされたUISearchBarを取得する1つの方法です。ただし、テーブルを検索する機能を制限したい場合は、通常のテキストフィールドを使用し、検索ボタンをフックして、別の配列のテーブルビューの結果をフィルタリングし、その配列でテーブルデータを更新できます。
UIsearchBar- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
はほぼ同等ですUItextField's valieChanged IBAction
わかりました。同じ問題が発生し、UISearchBarをサブクラス化しました。どうぞ
- (void) layoutSubviews {
[super layoutSubviews];
UITextField *searchField = nil;
for (UIView *subview in self.subviews) {
if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
[subview removeFromSuperview];
}
if ([subview isKindOfClass:[UITextField class]]) {
searchField = (UITextField *)subview;
searchField.leftViewMode = UITextFieldViewModeNever;
[searchField setValue:[UIFont systemFontOfSize:8] forKeyPath:@"_placeholderLabel.font"];
[searchField setBackground: [UIImage imageNamed:@"images.png"] ];
searchField.clearButtonMode = UITextFieldViewModeNever;
}
}
self.showsCancelButton = NO;
}