2015-02-05 19 views
6

Sto provando a utilizzare un file XIB per più tipi di sottoclassi UITableViewCell personalizzate (stessi IBOutlet - stesso aspetto - diversi metodi e logica).Un XIB per più sottoclassi UITableViewCell

Come posso farlo?

+0

Are u utilizzando un'unica tablview? –

risposta

2

In senso stretto, il framework non impone un vincolo stretto da un xib al proprietario del file. È possibile utilizzare il seguente codice per caricare un pennino:

NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"EXCustomCell" owner:nil options:nil]; 
EXFirstCustomCell *firstCell = (EXFirstCustomCell*)[nibContents objectAtIndex:0]; 
firstCell.firstView = [firstCell.contentView viewWithTag:VIEW_TAG]; 
firstCell.button = [firstCell.contentView viewWithTag:BUTTON_TAG]; 

In base alla logica di business, si può lanciare il risultato di [nibContents objectAtIndex:0]; per soddisfare la vostra abitudine UITableViewCell classe.

Modifica # 1:

Typecasting è generalmente una cattiva idea, dal momento che la firstCell sarà ancora sorta di class UITableViewCell. Una buona idea sarebbe quella di creare il tuo costruttore, passare il nibContents come argomento e fare i tuoi compiti di visualizzazione lì.

Modifica # 2

ho fatto un po 'di sperimentazione e ecco come ho ottenuto questo al lavoro:

  1. creare una vista XI ter indipendente e progettare il vostro cellulare lì. Deve essere una vista. Quello che stai facendo qui è la definizione di come sarà il contentView.

  2. Carica tutte le viste dallo xib. NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"EXCommonContentView" owner:nil options:nil];

  3. Creare un costruttore del tuo cellulare personalizzato in questo modo:

    -initWithNibContents:(NSArray*)nibContents { 
        self = [super init] 
        if(self) { 
         self.contentView = [nibContents objectAtIndex:0]; 
         self.button = [self.contentView viewWithTag:BUTTON_TAG]; 
         self.view = [self.contentView viewWithTag:VIEW_TAG]; 
        } 
    }