Modifica UISearchBar pulsante Annulla font, colore del testo e lo stile

C’è un modo per cambiare il carattere del testo e il colore del UISearchBar pulsante Annulla senza la creazione di sottoclassi la barra di ricerca?

InformationsquelleAutor Rowie Po | 2012-07-20

 

11 Replies
  1. 68

    È possibile modificare pulsante Annulla styling modificando l’aspetto di UIBarButtonItem contenuti in UISearchBar.

    Per esempio,

    [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                          [UIColor blueColor], 
                                                          UITextAttributeTextColor, 
                                                          [UIColor darkGrayColor], 
                                                          UITextAttributeTextShadowColor, 
                                                          [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], 
                                                          UITextAttributeTextShadowOffset,
                                                          nil] 
                                                forState:UIControlStateNormal];
    • Questa è la migliore risposta su questo argomento posso trovare ovunque.
    • Chi vuole impostare personalizzato UISearchBar cacel colore pulsante di utilizzare tinta [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar classe], nil] setTintColor:[UIColor redColor]];
    • Grazie.migliore risposta.
    • Grazie… funziona perfettamente
    • Basta impostare lo stile del font & dimensione, ho usato qualcosa di simile a questo: [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"SourceSansPro-Regular" size:14]} forState:UIControlStateNormal];
    • Questo non sembra funzionare per me. Ho impostato questa applicazione:didFinishLaunchingWithOptions:. Sto usando Xcode 5.0.2 con iOS 7 SDK e in esecuzione su un simulatore di iOS 6.1. Il pulsante annulla rimane lo stesso colore. Qualche suggerimento?

  2. 14

    Swift 3

    let attributes = [
        NSForegroundColorAttributeName : UIColor.white,
        NSFontAttributeName : UIFont.systemFont(ofSize: 17)
    ]
    UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: .normal)
  3. 4

    Base htinlinn la risposta, questo è quello che ho usato nel mio viewDidLoad metodo del controller di visualizzazione utilizzando la barra di ricerca in iOS 7:

    [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil]
                         setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], NSForegroundColorAttributeName, nil] 
                                       forState:UIControlStateNormal];
  4. 3

    Swift 4

    let attributes:[NSAttributedStringKey:Any] = [
      NSAttributedStringKey.foregroundColor : UIColor.black,
      NSAttributedStringKey.font : UIFont.systemFont(ofSize: 17)
    ]
    UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: .normal)
    • Per Swift 5 sostituire NSAttributedStringKey con NSAttributedString.Key
  5. 2

    Se si desidera modificare Annullare pulsante, è possibile farlo da:

    if let cancelButton = searchBar.valueForKey("cancelButton") as? UIButton {
        cancelButton.setTitle(<your_string>, forState: <UIControlState>)
        cancelButton.setTitleColor(<your_uicolor>, forState: <UIControlState>)
        cancelButton.setAttributedTitle(<your_nsattributedstring>, forState: <UIControlState>)
    }

    dove searchBar è il tuo UISearchBar oggetto.

  6. 1

    Semplificato Swift versione di @htinlinn risposta:

    let attributes = [
        NSForegroundColorAttributeName : UIColor.textBlueColor,
        NSFontAttributeName : UIFont.systemFontOfSize(13)
    ]
    UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).setTitleTextAttributes(attributes, forState: .Normal)
  7. 0

    Per modificare la barra di ricerca pulsante annulla devi prendere l’oggetto Pulsante e modificare il riferimento di tale pulsante il pulsante personalizzato.

    UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(50,20,300,30)];
    searchBar.delegate = self;
    searchBar.barStyle = UIBarStyleDefault;
    searchBar.showsCancelButton = YES;
    UIButton *cancelButton;
    for (id button in searchBar.subviews)
    {
        if ([button isKindOfClass:[UIButton class]])
       {
            cancelButton=(UIButton*)button;
            break;
       }
    }
  8. 0

    È possibile utilizzare la tinta di proprietà di campo per cambiare il colore della barra di ricerca, pulsante annulla colore saranno mostrati anche cambiato, ma secondo il colore del UISearchBar. Io non può essere modificato manualmente. Ma si può sempre mettere una custom in interface builder che nascondere il nativo pulsante annulla. E che l’utente dovrà utilizzare il pulsante personalizzato come pulsante annulla della barra di ricerca.

  9. 0

    Swift soluzione dopo iOS 9.0 (modificando htinlinn risposta):

    if #available(iOS 9.0, *) {
        UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UISearchBar.classForCoder()])
            .setTitleTextAttributes([
                NSFontAttributeName: UIFont.systemFontOfSize(12),
                NSForegroundColorAttributeName: UIColor.blueColor(),
                NSShadowAttributeName: NSShadow(color: UIColor.redColor(), offset: CGSizeMake(0, -1), blurRadius: 2)
                ],
                forState: UIControlState.Normal)
    } else {
        //Link to Objective-C Method
    }

    E l’attuale Obiettivo-C metodo (UITextAttributeTextColor è sconsigliata a partire da iOS 7.0):

    [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil]
     setTitleTextAttributes:@{
                              NSForegroundColorAttributeName: [UIColor blueColor],
                              NSFontAttributeName: [UIFont systemFontOfSize:12]}
     forState:UIControlStateNormal];

    La mia piccola ombra estensione utilizzata nel codice di cui sopra:

    extension NSShadow {
        convenience init(color: AnyObject!, offset: CGSize, blurRadius: CGFloat) {
            self.init()
            self.shadowColor = color
            self.shadowOffset = offset
            self.shadowBlurRadius = blurRadius
        }
    }
    • Ho un errore: Non è possibile invocare inizializzatore di tipo di ‘NSShadow’ con un elenco di argomenti di tipo ‘(colore: UIColor, offset: CGSize, blurRadius: Int)’
    • Scusate, ho dimenticato la mia piccola estensione. Ho aggiornato la mia risposta con il codice.
    • Nota a margine: si potrebbe utilizzare UISearchBar.self invece di UISearchBar.classForCoder()
  10. -1

    Una soluzione molto migliore qui

    UIButton *cancelButton = [searchBar valueForKey:@"_cancelButton"];
    [cancelButton setTitleColor:[UIColor yourColor] forState:UIControlStateNormal];
    [cancelButton setTitle:@"Your Text" forState:UIControlStateNormal];

    e allo stesso modo si può cambiare stile di testo e di proprietà del pulsante.

  11. -2

    Prova questo:

    [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"SourceSansPro-Regular" size:14]} forState:UIControlStateNormal];

Lascia un commento