2011-11-04 13 views

Odpowiedz

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

tak to działa !!!!! dzięki @keller – Desmond

+0

Następnie możesz kontrolować promień narożnika za pomocą searchBarTextField.layer.cornerRadius = 5.0; – esbenr

+0

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

2

Prosty dodatek tło obrazu, lewy i prawy widok widok dla TextField.

Przykład poniżej

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

textfield skąd? – Desmond

0

w naszym wcześniejszym projekcie również starał się realizować w taki sposób, ale dostosowanie nie jest możliwe.

+0

nie można tego zrobić? – Desmond

2

UISearchBar ma okrągły łuk, i to naprawić, jeśli chcesz, aby to prostokąt trzeba użyć niestandardowy pasek wyszukiwania z prostokątnego obrazu jak jak z paska wyszukiwania i 1 uibutton i UITextField i swojej własnej logiki wyszukiwanego

1

Chciałbym użyć UIView, z tymi funkcjami:
- ustawić ramkę.
- CoreGraphics przywozowe w swojej klasie
- ustawić białe tło widoku
- zestaw view.layer.cornerRadius=10;
- zestaw view.layer.borderWidth=8;
- zestaw view.layer.borderColor=[UIColor blackColor].CGColor;
- wstawić etykietę (z jasnym tle) wewnątrz utworzonego widoku
Dla przycisku po lewej używam interfejsu użytkownika, dla prawego zestawu przycisków textField.clearButtonMode= UITextFieldViewModeAlways;

Mam nadzieję, że to pomoże.

+0

wygląda na mocnego, myślę, że zostawiam go takim, jaki jest. jeśli to zadziała, daj mi znać. dzięki :) – Desmond

1

W obrazie docelowym nie widzę domyślny cień, więc będę wspomnieć, że ustawienie tła własności do zera będzie go usunąć. Musiałem to zrobić w moim projekcie, a usunięcie obrazu i manipulowanie granicą działa dobrze. Musiałem rzucić kontrolę, aby uzyskać właściwość w tle.

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

@Keller dziękuję za wskazówkę dotyczącą znalezienia kontroli.

0

Możesz spróbować tego.

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

Znacznie lepiej moim zdaniem:

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

Ja również niedawno osiągnął to w projekcie przez przemierzając subviews obiektu UISearchBar. Jednak pole tekstowe nie było bezpośrednim potomkiem, jak zasugerowała przyjęta odpowiedź, ale podzbiorem innego jego podukładu. Wewnętrzna hierarchia widoków prawdopodobnie zmieniła się w pewnym momencie. (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; 
       } 
      } 
     } 
    } 
} 

Metoda ta nie korzysta z żadnych metod nieudokumentowane więc to chyba App Store bezpieczny, mimo że jest podatna na zatrzymanie pracy z przyszłymi zmianami w SDK.

0

Dlaczego nie używać protokołu 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 która linia? –

+0

Wszystkie. Innymi słowy: samo opublikowanie "jakiegoś kodu" bez żadnego wyjaśnienia jest powszechnie postrzegane jako nienajlepsza odpowiedź. Więc może chcesz krótko wyjaśnić, w jaki sposób opublikowany kod pomaga odpowiedzieć na pytanie. Powodzenia! –

+0

@ Pierre.Vriens spójrz na zaakceptowany komentarz, nie ma potrzeby wyjaśniania. wystarczy skopiować i wkleić w swoim UIViewController. –

Powiązane problemy