2015-09-30 6 views
8

Sono nuovo nello sviluppo di iOS. Sto usando swift e voglio progettare le mie viste a livello di codice, ma vorrei usare IBDesigner e IBInspectable per velocizzare il mio processo di progettazione.Utilizzo di IBDesignable e IBInspectable con UIViewController

In questo momento ho un controller di visualizzazione con vari pulsanti e etichette su di esso. Ecco un frammento del mio codice:

@IBDesignable class LandingView: UIViewController, LandingViewProtocol { 

    @IBInspectable lazy var backButton: UIButton = { 
     var button = UIButton() 
     button.backgroundColor = Styles.BUTTON_COLOR 
     return button 
    }() 
    @IBInspectable lazy var caption: UILabel = UILabel() 
} 

La mia domanda ora è come si usa il costruttore di interfaccia con IBDesignable e IBInspectable? Devo aggiungere un file .xib? Ho visto alcune altre domande che dicevano che ho bisogno di usare un parco giochi, ma stavo cercando di evitare di usarlo, essenzialmente volevo sapere se è possibile visualizzare il mio intero viewcontroller?

Grazie,

+0

@IBInspectable Tutorial: https://iosdevcenters.blogspot.com/2017/07/how-to-use-ibinspectable-in-swift-30.html –

risposta

3

C'è una soluzione per testare il layout view controller con IBDesignable.

  1. layout vostro controller della vista nel codice proprio come si farebbe normalmente
  2. Creare una sottoclasse UIView IBDesignable e aggiungere vista del controller vista come una visualizzazione secondaria.
  3. Creare un XI ter e impostare la classe la sua vista alla sottoclasse creato nel passaggio 2

di approfondire la fase 2, initWithFrame del IBDesignable: metodo può sembrare

- (instancetype)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    MyViewController *viewController = [MyViewController alloc] init]; 
    viewController.view.frame = self.bounds; 
    [self addSubview:viewController.view]; 
    return self; 
} 

Quindi al di là di questo metodo initWithFrame, tutto il codice del layout può essere gestito dal controller della vista. Puoi passare i dati al tuo controller di visualizzazione nel metodo prepareForInterfaceBuilder della tua sottoview.

+0

Se si aggiunge un UIView di un UIViewController si perde il ciclo di vita di ViewController come viewWill e DidAppear. Non è eccessivo? – OhadM

3

Non è possibile utilizzare IBDesignable con un'altra classe che non eredita da UIView o NSView. Controllare la linea guida da parte di Apple circa l'IBDesignable:

È possibile utilizzare due diverse attributes- @ IBDesignable e @ IBInspectable-per abilitare in diretta, visualizzazione personalizzata di progettazione interattiva in Interface Builder. Quando si crea una visualizzazione personalizzata che eredita dalla classe UIView o la classe NSView, è possibile aggiungere l'attributo @IBDesignable poco prima della dichiarazione di classe

Fonte: Live Rendering

un