2

我想将 UISearchBar 控件自定义为如下图所示的样式: 这是一个自定义的 UISearchBar,这里的文本字段没有边界。

首先我应该删除背景视图,然后在 UISearchBar 中找到 UITextfiled,扩展 UITextfiled 的框架并删除它的边框。

这是我的代码:

UITextField *searchField;

NSUInteger numViews = [self.subviews count];
for(int i = 0; i != numViews; i++) {
    if([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) { //conform?
        searchField = [self.subviews objectAtIndex:i];
    }
}
if(!(searchField == nil)) {

    [searchField setBorderStyle:UITextBorderStyleNone];
    searchField.frame = self.frame; //modify the frame
}

[[self.subviews objectAtIndex:0]removeFromSuperview]; //remove the background.

结果是 UITextField 的边界还在。:(

在此处输入图像描述

我的问题是: 1.为什么我不能修改 UISearchBar 的 UITextField 的外观?

2.如何去除UISearchBar中UITextfield的边框。

非常感谢!

4

2 回答 2

7

子类 UISearchBar 并覆盖 layoutSubViews 以删除搜索栏背景和文本字段边框子视图:

- (void)layoutSubviews
{    
    [super layoutSubviews];

    for (UIView *subview in self.subviews) {
        // Remove the default background
        if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
            [subview removeFromSuperview];
        }

        // Remove the rounded corners
        if ([subview isKindOfClass:NSClassFromString(@"UITextField")]) {
            UITextField *textField = (UITextField *)subview;
            for (UIView *subsubview in textField.subviews) {
               if ([subsubview isKindOfClass:NSClassFromString(@"UITextFieldBorderView")]) {
                    [subsubview removeFromSuperview];
                }
            }
        }
    }
}
于 2013-04-03T20:36:46.960 回答
0

我不确定这一点,但是我怀疑您能够实现UISearchBar与图像中类似的唯一方法是创建一个新的UISearchBar. 使用它,您可以将其设置为看起来与图像中的完全一样。

如果您决定走子类化路线,这篇文章可能会对您有所帮助。

于 2012-05-15T14:16:03.440 回答