2011-11-04 38 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。 –

相關問題