2014-02-11 47 views
1

我试图做一个UISearchBar矩形,而不是圆形的,但所有的解决方案,我发现迄今(主要是通过迭代子视图)似乎在iOS 7破矩形的UISearchBar在iOS 7

我做了一些研究自己事实证明,它只有一个UIView子视图,其中有子视图,UISearchBarBackgroundUISearchBarTextField(它们都是私有类)。 我试图

if ([view isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { 
    [view removeFromSuperview]; 
} 

if ([view conformsToProtocol:@protocol(UITextInputTraits)]) { 
    @try { 

     [(UITextField *)view setBorderStyle:UITextBorderStyleRoundedRect]; 
    } 
    @catch (NSException * e) { 
     // ignore exception 
    } 
} 

其中view是一个UIView子视图的子视图,但没有人似乎工作。

+0

事实证明,问题部分原因是我将UISearchBar的搜索样式(在IB中)设置为最小。如果你将它设置为Prominent,那么第一段代码就可以工作。 (实际上,它仍然是圆形的,所以不是完美的解决方案。如果有人有更好的想法,请分享它。) – Rickye

+0

您可能想要将其作为答案发布。 – Marco

+0

@Marco看到我对该评论的编辑,这不是最好的解决方案,但是如果没有人在一段时间内提出更好的解决方案,我会发布它。 – Rickye

回答

1

尝试......(我知道这还用子视图,但它工作在ios7)

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 20, 320, 49)]; 
[self.view addSubview:searchBar]; 
[self checkSubViewsOfView:searchBar WithTabIndex:@""]; 

,并添加这个方法

-(void)checkSubViewsOfView:(UIView *)view WithTabIndex:(NSString *)strTab 
{ 
    if ([view isKindOfClass:NSClassFromString(@"UISearchBarTextField")]) 
    { 
     view.layer.borderWidth = 1; 
     view.layer.borderColor = [[UIColor whiteColor] CGColor]; 
     return; 
    } 

    for (UIView *vvv in view.subviews) 
    { 
     NSLog(@"%@%@",strTab,[vvv description]); 

     if (vvv.subviews > 0) 
     { 
      NSString *str = [NSString stringWithFormat:@"____%@",strTab]; 
      [self checkSubViewsOfView:vvv WithTabIndex:str]; 
     } 
    } 
} 
+0

好的,谢谢!密切关系我最终与。这个问题是它杀死了UISearchBar的大小调整,因此取消按钮从不出现在它旁边。 – Rickye

+0

我的不好,这个工作非常好,谢谢! – Rickye

+0

@Rickye如果你使用这种方法。这是坏的。因为它不是来自公众文件。所以用Thorsten说的方法是最好的 – codercat

1

可以设置searchfield背景是这样的:

[self.searchBar setSearchFieldBackgroundImage:[[UIImage imageNamed:@"searchbar_stretch-0-10-0-10"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)] forState:UIControlStateNormal]; 

和搜索栏背景是这样的:

[self.searchBar setBackgroundImage:[UIImage imageNamed:@"categories_navbar"]];