2012-10-05 9 views
5

Ich habe eine benutzerdefinierte Tabellenzelle von UITableViewCell geerbt. Es funktioniert gut.Wie erben Sie eine XIB-Datei in einem iOS-Projekt?

Jetzt muss ich gleiche Art von Zelle für einen anderen Bildschirm mit wenig Änderungen vornehmen. Was ich plante, dass ich meine alte Zellklasse erben sollte, um ihr Design und ihre Logik wiederzuverwenden, aber ich konnte keinen Weg finden, wie man eine XIB-Datei erbt.

Sollte ich alle Ansichten von einer Xib zu anderen kopieren/einfügen oder gibt es eine Möglichkeit, es mit wenigen Änderungen zu erweitern?

EDIT: Ich habe folgende Fragen gelesen und sie behaupten, dass es nicht möglich, gerade jetzt:

Bei unmöglich es ist, was Ansatz sollten wir nutzen, um Mach das effektiv?

Antwort

0

Sie sollten die Datei duplizieren und notwendige Änderungen vornehmen.

Dank

+0

Während in OO Kontext zu denken, ich habe versucht, um Doppelarbeit zu vermeiden; – Ans

0

Es gibt nichts, den Editor XIB tun kann, dass Sie nicht programmatisch tun können. Der einfachste Weg ist (normalerweise), es einfach auf den Code zu verschieben und dann das XIB von allen Zielen/Projekten zu löschen. Dann können Sie wie immer Unterklassen erstellen.

Als Bonus kann dies wirklich Verwaltung von Ressourcen für mehrere Ziele vereinfachen.

Eine Alternative zum Verschieben in den Code ist das Verschieben der modifizierbaren Teile in andere Instanzen (die von der Zelle gehalten/referenziert werden). Der Controller könnte dann dieses Attribut vor der Präsentation setzen. Wenn also die Stilisierung und Zeichnung in irgendeiner Hinsicht speziell oder anpassbar sind, dann verschiebe diese Logik einfach in eine Klassenhierarchie, die nicht auf der XIB-Deserialisierung beruht, und mache dann diese Teile zu Eigenschaften der Zelle, die du in der Spitze definiert hast.

0

Wenn Sie sich für eine andere Lösung für Ihr Problem suchen, dann würde ich Ihnen vorschlagen, eine benutzerdefinierte Zelle programmatisch zu erstellen.

ich Ihnen Schritt für Schritt am Erklären, dies wird Ihnen helfen, besser.

Also für das Erstellen einer Klasse, die von UITableViewCell erben, und fügen Sie Komponenten, die Sie in Ihrer Tabelle benötigt.

so sieht Ihre .h-Datei so aus.

// -------- ------- START >>

#import <UIKit/UIKit.h> 

@interface CustomCell : UITableViewCell{ 

UIButton *btn1; 
UIButton *btn2; 
UIButton *btn3; 

} 

@property(nonatomic , retain) UIButton *btn1; 
@property(nonatomic , retain) UIButton *btn2; 
@property(nonatomic , retain) UIButton *btn3; 

@end 

// ------- END ------- < <

und Ihre.m-Datei wird wie folgt aussehen

// -------- ------- START >>

#import "CustomCell.h" 

    @implementation CustomCell 
    @synthesize btn1, btn2, btn3; 

    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
    { 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 

    //----frame the components as per your project req.----  

    btn1 = [[UIButton alloc] initWithFrame:CGRectMake(1, 1, 85, 70)]; 
    [self.contentView addSubview:btn1]; 

    btn2 = [[UIButton alloc] initWithFrame:CGRectMake(100, 1, 85, 70)]; 
    [self.contentView addSubview:btn2]; 

    btn3 = [[UIButton alloc] initWithFrame:CGRectMake(195,1, 85, 70)]; 
    [self.contentView addSubview:btn3]; 
    } 
    return self; 
    } 

    - (void)setSelected:(BOOL)selected animated:(BOOL)animated 
    { 
    [super setSelected:selected animated:animated]; 

     // Configure the view for the selected state 
    } 

// -------- END- ------ <

Jetzt können Sie diese benutzerdefinierte Zelle in Ihren anderen Klassen wiederverwenden. und können sie auch wie pro Anforderung ändern.

Jetzt in cellForRowAtIndexPath >>

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 
{ 

static NSString *CellIdentifier = @"Cell"; 

CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 


if (cell == nil) 
{ 
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ; 
} 

    [cell.btN1 setImage:[UIImage imageNamed:@"YOUR IMAGE NAME"] forState:UIControlStateNormal]; // YOU CAN MAKE CHANGES HERE. 

    ................// remaining logic goes here 

return cell; 

} 

HOPE DIES Ihnen helfen.

1 .Also take a look on link tutorial.

2. A Closer Look at Table View Cells

+0

Ich denke du hast meine Frage nicht gelesen; Ich habe bereits eine benutzerdefinierte Zelle von der UITableViewCell-Klasse geerbt; Ich weiß, wie man benutzerdefinierte Zellen für TableView erstellt; Ich brauche eine Ebene mehr Vererbung, nicht direkt von UITableViewCell, aber von meiner eigenen benutzerdefinierten Zellklasse, und wichtig, XIB-Dateiansicht wieder zu verwenden; – Ans

0

Haben Sie gerade versucht Vererben die Ansichtsklasse benutzerdefinierte Zelle? Auf diese Weise können Sie IBOutlets in der Basisklasse für alle UI-Komponenten verwenden und in der neuen Unterklasse können Sie sie wie gewünscht gemäß dem neuen Verhalten verwalten. Es wäre wie Subklassen ein UIView oder ein UIViewController usw.

0

es mir einmal passiert und was ich getan habe ist:

Statt Subklassifizieren hat ich einen separaten UIView mit Tisch mit customCell und fügte hinzu, dass Ansicht als Subview wo benötigt. Ich konnte die Benutzeroberfläche von customCell mit einem Schlüssel in customCell ändern, um zu wissen, welche UIViewController es als Unteransicht hinzufügt.

Ich bin nicht sicher, wie gut dieser Ansatz ist, aber immer noch eine Art und Weise :)

Verwandte Themen