2012-12-09 10 views
5

Ho un UIButton sottoclasse che carica un Pennino:Come utilizzare un UIButton personalizzato con Interface Builder?

@implementation BlaButtonVC 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     NSArray *subViews = [[NSBundle mainBundle] loadNibNamed:@"BlaButton" owner:self options:nil]; 
     [self addSubview:subViews[0]]; 
    } 
    return self; 
} 

@end 

E posso aggiungere questo pulsante per una vista, come questo:

// ViewController.m 

BlaButtonVC *button = [[BlaButtonVC alloc] initWithFrame:CGRectMake(10, 10, 280, 44)]; 

button.titleXLabel.text = @"Nyuff"; 
button.descLabel.text = @"Kukk"; 

[self.view addSubview:button]; 

Il mio problema è che non so come fare da Interface Bulder, come usare questa sottoclasse UIButton invece di quella normale.

Già modificato Tipo pulsante su Personalizzato e Classe personalizzata su BlaButtonVC, ma non è sufficiente. Chiamerà BlaButtonVC initWithFrame, ma il pulsante non verrà visualizzato né in Interface Builder, né in Simulator.

Cosa mi è mancato?

Qui trovi il campione completo:
https://www.dropbox.com/s/ioucpb6jn6nr0hs/blabla1.zip

risposta

6

Quando inizializzata dal StoryBoard, chiama il metodo initWithCoder: invece di initWithFrame:. A parte questo, tutto è corretto.

+2

Sì, chiama '-initWithCoder:', ma non è necessario sovrascriverlo. Invece dovresti sovrascrivere '-awakeFromNib', perché in quel momento tutto è impostato. (Non pensate nemmeno di chiamare questi due da soli.) – Tricertops

+2

Non c'è niente di sbagliato nell'override di entrambi i comandi 'initWithCoder:' e 'awakeFromNib'. Dipende da come vuole che sia impostato. – Martol1ni

+0

Nella maggior parte dei casi (se non tutti) '-awakeFromNib' è preferibile eseguire l'override. Vedi i documenti per ['- [NSObject (UINibLoadingAdditions) awakeFromNib]'] (https://developer.apple.com/library/ios/#documentation/UIKit/Reference/NSObject_UIKitAdditions/Introduction/Introduction.html). – Tricertops

0

In Interface Builder non è possibile aggiungere subviews a UIButton, ecco alcune idee:

  1. farlo in codice.
  2. Posiziona il pulsante sotto le etichette e l'immagine, in modo che possa ricevere tocchi e funzionare come previsto.
  3. Utilizzare UITableView con celle (questo sembra quello che si sta tentando di ottenere).
  4. Utilizzare personalizzato UIView con UITapGestureRecognizer.
+0

@ Julian Vedete la parola _ "non" _ nella mia risposta? È il sesto. Comunque, guardando la domanda e la mia risposta dopo 3 anni, non hanno senso per me. – Tricertops