使UItextfieldfunction像UISearchBar

我想改变UISearchBar的外观:所以,

如果有一种方法可以让我的UITextField (在自定义的search背景中)像UISearchBar一样工作? 或者inheritance和覆盖- (void)layoutSubviews是唯一的方法?

请告诉如何inheritance它!

您可以使用下面的代码更改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

另请参阅我的这个答案与一些其他function来更改search栏组件的布局.. 如何更改iOS上的UISearchBar组件的背景颜色

更新:

为了改变取消button的外观使用这个波纹pipe代码…

  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; } 

尝试这个

  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]; 

使用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; } 

更改UIsearchBar背景是获取自定义UISearchBar的一种方法。 但是,如果你想有限的functionsearch一个表,你可以有正常的文本字段,并钩上一个searchbutton来过滤另一个数组中的tableview结果,并使用该数组更新tabledata。

UIsearchBar的- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText UItextField's valieChanged IBAction几乎等同于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; } 

输入文字时