6

見た目を変えたいUISearchBar:だから、

UITextField(検索のカスタムバックグラウンドで)自分の機能を次のように機能させる方法がある場合はどうすれば よいUISearchBarですか?または、サブクラス化してオーバーライドすること- (void)layoutSubviewsが唯一の方法ですか?

サブクラス化する方法を教えてください!!!

4

6 に答える 6

6

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
        }
    }
于 2013-01-03T07:07:18.557 に答える
6

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;
}
于 2013-05-24T08:17:20.667 に答える
2

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;
}
于 2014-05-23T07:59:28.283 に答える
1

これを試して

    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];
于 2013-01-03T07:08:46.927 に答える
0

UIsearchBarの背景を変更することは、カスタマイズされたUISearchBarを取得する1つの方法です。ただし、テーブルを検索する機能を制限したい場合は、通常のテキストフィールドを使用し、検索ボタンをフックして、別の配列のテーブルビューの結果をフィルタリングし、その配列でテーブルデータを更新できます。

UIsearchBar- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText はほぼ同等ですUItextField's valieChanged IBAction

于 2013-01-03T08:23:53.660 に答える
0

わかりました。同じ問題が発生し、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;
}

テキストを入力するとき

于 2013-07-10T05:47:12.510 に答える