2011-11-04 20 views

答えて

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

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

:ターゲット画像で

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

はい、この作品!!!!!ありがとう@ケラー – Desmond

+0

次に、searchBarTextField.layer.cornerRadius = 5.0でコーナー半径を制御できます。 – esbenr

+0

([searchBarSubview respondsToSelector:@sel(setBorderStyle)])であれば、 ' [(UITextFieldの*)searchBarSubview setBorderStyle:UITextBorderStyleRoundedRect];' –

2

シンプル追加背景画像、あなたのTextFieldのためのビューと右ビューを残しました。私たちの以前のプロジェクトで

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
あなたはそれはあなたが検索バーと1 uibuttonで、UITextFieldのなどの矩形の画像でカスタム検索バーを使用する必要が矩形にしたい場合は修正し、独自の検索ロジックです

UIViewを使用し、これらの機能を使用します。
- フレームを設定します。
- あなたのクラスのインポートCoreGraphicsは
は -
ビューの白い背景を設定 - view.layer.cornerRadius=10;
を設定 - view.layer.borderWidth=8;
を設定 - 設定view.layer.borderColor=[UIColor blackColor].CGColor;
- 作成されたビュー
の内側(明確なバックグラウンドを持つ)ラベルを挿入 左のボタンについては、右のボタンセットにはuiimageを使用します。textField.clearButtonMode= UITextFieldViewModeAlways;

希望します。スウィフト4

+0

のように見えるのは難しいですが、私はそれをそのまま残すと思います。あなたのために働くことが起こったら、私に知らせてください。 ありがとう:) – Desmond

1

は、私は、デフォルトの影が表示されていないので、私はnilに背景プロパティを設定すると、それを削除することを言及します。私は私のプロジェクトでこれを行う必要があったと画像を削除し、境界を操作するうまく動作します。コントロールをキャストして、背景のプロパティに到達する必要がありました。

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

@Kellerはコントロールを見つけるためのヒントをありがとう。

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にコピーして貼り付けてください。 –

関連する問題