2014-10-06 32 views
10

Vorrei impostare il colore del bordo usando lo storyboard se possibile. Ho visto risposta qui: UITextField border colorUITextField imposta il colore del bordo usando lo storyboard

E ho seguito rispondere in storyboard: enter image description here

Tutte le proprietà impostate, ma TextField non mostra confine. Eventuali suggerimenti?

+0

Si può vedere [Come aggiungi bordo nello storyboard] (http://stackoverflow.com/questions/12301256/is-it-possible-to-set-uiview-border-properties-from-interface-builder/ 30348021 # 30348021) – iHulk

risposta

2

Non sono sicuro che sia possibile modificare il colore del bordo di un UITextfield nello storyboard. È possibile modificarlo a livello di codice con qualcosa sulla falsariga di;

UITextField *myTextField = (UITextField *)[self.view viewWithTag:1]; 
myTextField.borderStyle = UITextBorderStyleLine; 
myTextField.layer.borderWidth = 2; 
myTextField.layer.borderColor = [[UIColor redColor] CGColor]; 

Spero che questo aiuti.

+0

@katit: è stato di qualche aiuto o hai trovato un modo per farlo nello storyboard? – Gismay

0

Non mostra alcun bordo a causa della proprietà layer.borderColor. È di tipo CGColor e gli attributi Runtime non lo supportano ancora per impostazione predefinita, quindi, impostando solo un attributo sbagliato, disabilita anche gli altri.

di farlo dallo storyboard, ma anche coinvolgendo po 'di codice e sottoclassi, è possibile utilizzare questo metodo:

sottoclasse UITextField e fare una proprietà UIColor IB_DESIGNABLE, che sarete poi trasformare in CGColor e applicarlo a self.layer.borderColor.

7

Come ha fatto notare Bogdan, è vero che non è possibile trovare la proprietà layer.borderColor nello storyboard poiché si tratta di una cosa del tempo di esecuzione.

Tuttavia è ancora possibile impostare borderColor senza utilizzare IB_DESIGNABLE, su qualsiasi vista (o sottoclasse UIView) con un po 'di codifica.

Qui di seguito sono i passi come raggiungerlo,

  1. creare una categoria sulla classe di CALayer. Dichiarare una proprietà di tipo UIColor con un nome appropriato, lo chiamerò come borderUIColor.
  2. Scrivi il setter e il getter per questa proprietà.
  3. Nel metodo "Setter" è sufficiente impostare la proprietà "borderColor" del layer sul nuovo valore CGColor dei colori.
  4. Nel metodo 'Getter' restituisce UIColor con borderColor di livello.

P.S: ricordare che le categorie non possono avere proprietà memorizzate. 'borderUIColor' viene utilizzato come proprietà calcolata, proprio come riferimento per ottenere ciò su cui ci stiamo concentrando.

Si prega di dare un'occhiata al seguente codice di esempio;

Objective C:

Interface File:

#import <QuartzCore/QuartzCore.h> 
#import <UIKit/UIKit.h> 

@interface CALayer (BorderProperties) 

// This assigns a CGColor to borderColor. 
@property (nonatomic, assign) UIColor* borderUIColor; 

@end 

Attuazione File:

#import "CALayer+BorderProperties.h" 

@implementation CALayer (BorderProperties) 

- (void)setBorderUIColor:(UIColor *)color { 
    self.borderColor = color.CGColor; 
} 

- (UIColor *)borderUIColor { 
    return [UIColor colorWithCGColor:self.borderColor]; 
} 

@end 

Swift 3.1:

extension CALayer { 
    var borderUIColor: UIColor { 
     set { 
      self.borderColor = newValue.cgColor 
     } 

     get { 
      return UIColor(cgColor: self.borderColor!) 
     } 
    } 
} 

E infine andare al tuo storyboard/XIB, seguire i passaggi rimanenti;

  1. Fare clic sull'oggetto Visualizza per il quale si desidera impostare Colore bordo.
  2. Fare clic su "Identity Inspector" (3 ° da sinistra) nel pannello "Utility" (lato destro dello schermo).
  3. In "Attributi runtime definiti dall'utente", fare clic sul pulsante "+" per aggiungere un percorso chiave.
  4. Impostare il tipo di percorso chiave su "Colore".
  5. Immettere il valore per il percorso chiave come "layer.borderUIColor". [Ricorda che questo dovrebbe essere il nome della variabile che hai dichiarato nella categoria, non borderColor qui è borderUIColor].
  6. Infine, scegli il colore che desideri.

Edit: Hai per impostare il valore layer.borderWidth proprietà per almeno 1 per vedere il colore del bordo.

Build and Run. Happy Coding. :)

+0

Per ** Swift 3 ** è sufficiente sostituire tutte le occorrenze di 'CGColor' con' cgColor' nella versione ** Swift 2 **. – CAD97

0

Questa è una variante rispetto alla risposta @rameswar che ritengo sia corretta. Visto che stiamo applicando una UIColor, penso che sia preferibile scrivere un'estensione per invece la UITextField (UI cose insieme):

extension UITextField { 

    var borderColor : UIColor? { 
    get { 
     if let cgcolor = layer.borderColor { 
     return UIColor(CGColor: cgcolor) 
     } else { 
     return nil 
     } 
    } 
    set { 
     layer.borderColor = newValue?.CGColor 

     // width must be at least 1.0 
     if layer.borderWidth < 1.0 { 
     layer.borderWidth = 1.0 
     } 
    } 
    } 
} 

La proprietà runtime sarebbe poi borderColor (in modo che non c'è bisogno di digitare layer. e penso che sia un po 'più pulito di borderUIColor).

Il borderColor di CALayer è facoltativo quindi è questa proprietà. Diventa nero se impostato su nil

E infine, lo layer.borderWidth è impostato su un valore minimo di 1,0 perché il colore non è impostato diversamente.

3

Così come sottolineato da Bogdan, si potrebbe benissimo farlo con una semplice sottoclasse e solo pochi bit di codice. Dopodiché tutto sarà modificabile in Storyboard.

  1. sottoclasse UITextField
  2. Creare due proprietà, una per larghezza del bordo e uno per il colore del bordo
  3. rendere tali variabili IBInspectable e tutta la classe IBDesignable
  4. sarete in grado di cambiare colore e lo spessore del bordo e vedere il cambiamento in tempo reale.

Codice per l'illustrazione (Swift 3.1):

@IBDesignable 
class FormTextField: UITextField { 

    @IBInspectable var borderColor: UIColor? { 
     didSet { 
      layer.borderColor = borderColor?.cgColor 
     } 
    } 

    @IBInspectable var borderWidth: CGFloat = 0 { 
     didSet { 
      layer.borderWidth = borderWidth 
     } 
    } 
} 

Edit: Vedrete questo nella vostra Attributi ispettore

Attributes Inspector

Problemi correlati