2011-11-04 35 views

回答

19
for (UIView *searchBarSubview in [mySearchBar subviews]) { 
     if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) { 
      @try { 

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

斯威夫特4:

mySearchBar.subviews().forEach { searchBarSubview in 
    if searchBarSubview is UITextInputTraits { 
    do { 
     (searchBarSubview as? UITextField)?.borderStyle = .roundedRect 
    } catch { 
     // ignore exception 
    } 
    } 
} 
+0

是的这个作品!!!!!谢谢@keller – Desmond

+0

然后你可以通过searchBarTextField.layer.cornerRadius = 5.0来控制拐角半径; – esbenr

+0

如果([searchBarSubview respondsToSelector:@sel(setBorderStyle)])' [(的UITextField *)searchBarSubview setBorderStyle:UITextBorderStyleRoundedRect]' –

2

简单的添加背景图像,左视图,右视图的文本字段。下面

UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 10., nameField.bounds.size.height)]; 
nameField.leftView = leftView; 
nameField.leftViewMode = UITextFieldViewModeAlways; 
leftView release]; 
+1

从那里文本字段? – Desmond

0

在我们前面的项目

例子中,我们也试图以这种方式来实现,但定制是不可能的。

+0

没办法做到这一点? – Desmond

2

的UISearchBar具有非圆曲线,如果你喜欢,使其矩形,你必须使用与矩形图像自定义搜索栏像搜索栏和1的UIButton,同时也是UITextField,和你自己的搜索逻辑,则修复

1

我会使用UIView,这些功能:
- 设置您的框架。
- 在你的类进口CoreGraphics在
- 设置视图
的白色背景 - 设置view.layer.cornerRadius=10;
- 设置view.layer.borderWidth=8;
- 设置view.layer.borderColor=[UIColor blackColor].CGColor;
- 插入标签(带有明显的背景)创建的视图
内 对于左侧的按钮,我会使用uiimage,右键设置textField.clearButtonMode= UITextFieldViewModeAlways;

希望这有助于。

+0

看起来很难,我想我会保持原样。如果它碰巧为你工作,让我知道。 谢谢:) – Desmond

1

在目标图像我没有看到默认的影子,所以我会提的是,背景属性设置为无将其删除。我需要在我的项目中做到这一点,并删除图像和操纵边界效果很好。我不得不施放控制权来获得背景属性。

UITextField * x = (UITextField*)searchBarSubview; 
x.background = nil; 

@凯勒感谢您的提示找到控制。

0

你可以试试这个。

for (UIView *searchBarSubview in [search_bar subviews]) { 
     if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) { 
      if([searchBarSubview isKindOfClass:[UITextField class]]) 
      { 
       [(UITextField *)searchBarSubview setBorderStyle:UITextBorderStyleRoundedRect]; 
      } 
     } 
    } 
2

在我看来好多了:

UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"]; 
txfSearchField.borderStyle = UITextBorderStyleNone; 
0

我也最近在一个项目通过遍历的UISearchBar对象的子视图实现这一点。但是,文本字段并不像接受的答案所建议的那样是一个直接的孩子,而是另一个子视图的子视图。内部视图层次结构可能在某些时候发生了变化。 (SDK 8。4)

+ (void)setSearchBar:(UISearchBar *)searchBar cornerRadius:(CGFloat)radius { 
    //set searchbar corner radius 
    for(UIView *possibleSearchBarTextFieldSuperview in [searchBar subviews]) { 
     if([[possibleSearchBarTextFieldSuperview subviews] count] > 0) { 
      for(UIView *possibleInnerSearchBarTextField in [possibleSearchBarTextFieldSuperview subviews]) { 
       if([possibleInnerSearchBarTextField conformsToProtocol:@protocol(UITextInputTraits)]) { 
        possibleInnerSearchBarTextField.layer.cornerRadius = radius; 
        possibleInnerSearchBarTextField.layer.masksToBounds = YES; 
        return; 
       } 
      } 
     } 
    } 
} 

因此它可能是App Store的安全,虽然它是容易停止与该SDK的未来变化的工作这种方法不使用任何无证方法。

0

为什么不使用UIAppearance协议?

[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setBorderStyle:UITextBorderStyleRoundedRect];

0

夫特3

let textFieldInsideUISearchBar = searchBar.value(forKey: "searchField") as? UITextField 
    textFieldInsideUISearchBar?.borderStyle = .none 
    textFieldInsideUISearchBar?.backgroundColor = UIColor.white 
+0

@ Pierre.Vriens哪一行? –

+0

所有这些。换句话说:只是发布“一些代码”而没有任何解释,通常被认为不是一个高质量的答案。所以,也许你想简要地解释你发布的代码如何帮助回答这个问题。祝你好运! –

+0

@ Pierre.Vriens看看接受的评论,不需要解释。 只需复制并粘贴到您的UIViewController。 –

相关问题