2011-11-04 13 views

risposta

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

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

Swift 4:

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

sì, questo funziona !!!!! grazie @keller – Desmond

+0

Quindi puoi controllare il raggio dell'angolo con searchBarTextField.layer.cornerRadius = 5.0; – esbenr

+0

if ([searchBarSubview respondsToSelector: @sel (SetBorderStyle)]) ' [(UITextField *) searchBarSubview SetBorderStyle: UITextBorderStyleRoundedRect];' –

2

immagine add semplice sfondo, vista e la vista giusta per il vostro TextField sinistra.

Esempio seguito

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

campo di testo da dove? – Desmond

0

Nel nostro precedente progetto abbiamo anche cercato di attuare in maniera tale, ma la personalizzazione non è possibile.

+0

non c'è modo di farlo? – Desmond

2

UISearchBar ha la curva di turno, e si risolve se ti piace farlo rettangolo è necessario utilizzare barra di ricerca personalizzato immagine rettangolare con quanto come di barra di ricerca e 1 UIButton e UITextField, e la logica propria ricerca

1

Vorrei usare un UIView, con queste caratteristiche:
- imposta il tuo frame.
- CoreGraphics importazione nella tua classe
- impostare uno sfondo bianco della vista
- impostati view.layer.cornerRadius=10;
- impostati view.layer.borderWidth=8;
- impostati view.layer.borderColor=[UIColor blackColor].CGColor;
- inserire un'etichetta (con uno sfondo chiaro) all'interno della vista creata
Per il pulsante a sinistra userei un uiimage, per il set di tasti destro textField.clearButtonMode= UITextFieldViewModeAlways;

Spero che questo aiuti.

+0

sembra duro, penso che lo lascerò così com'è. se capita di lavorare per te fammi sapere. grazie :) – Desmond

1

Nell'immagine di destinazione non vedo l'ombra di default, quindi mi dire che l'impostazione del sfondo proprietà a zero lo rimuoverà. Avevo bisogno di farlo nel mio progetto e rimuovere l'immagine e manipolare il confine funziona bene. Ho dovuto eseguire il controllo per ottenere lo sfondo proprietà.

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

@Keller grazie per il suggerimento per trovare il controllo.

0

Puoi provare questo.

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

Molto meglio, a mio parere:

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

Ho anche recentemente raggiunto questo in un progetto attraversando le subviews dell'oggetto UISearchBar. Tuttavia, il campo di testo non era un bambino immediato come suggeriva la risposta accettata, ma una sottoview di un'altra sottoview di esso. La gerarchia delle viste interne è stata probabilmente modificata a un certo punto. (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; 
       } 
      } 
     } 
    } 
} 

Questo metodo non utilizza alcun metodo non documentati quindi è probabilmente App Store al sicuro, anche se è suscettibile di smettere di lavorare con le future modifiche al SDK.

0

Perché non utilizzare il protocollo UIAppearance?

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

0

Swift 3

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

@ Pierre.Vriens quale linea? –

+0

Tutti loro. In altre parole: semplicemente postare "qualche codice" senza alcuna spiegazione, è comunemente percepito come non una risposta di alta qualità. Quindi forse vuoi spiegare brevemente in che modo il codice che hai pubblicato aiuta a rispondere alla domanda. In bocca al lupo! –

+0

@ Pierre.Vriens guarda il commento accettato, non c'è bisogno di spiegarlo. copia e incolla nel tuo UIViewController. –