使UItextfield像UISearchBar一样运行

nr5*_*nr5 6 iphone uisearchbar ios

我想改变外观UISearchBar:所以,

如果有一种方法可以使我 UITextField(在自定义搜索背景中)的功能如何UISearchBar?或继承和覆盖- (void)layoutSubviews是唯一的方法?

请告诉如何继承它!

Par*_*shi 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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

从这段代码中你可以设置图像或其他任何背景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
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 好吧它首先工作我删除了UIsearchbar的背景然后放置了我自己的.然后使用您的上述链接更改UItext字段的背景.现在的问题是我需要取消按钮,如何访问它来更改其框架和类型 (2认同)

小智 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;
}
Run Code Online (Sandbox Code Playgroud)