2012-10-05 9 views
5

Mam niestandardową komórkę tabeli dziedziczoną z UITableViewCell. Działa dobrze.Jak dziedziczyć plik XIB w projekcie iOS?

Teraz muszę wykonać ten sam rodzaj komórki dla innego ekranu z niewielkimi modyfikacjami. To, co planowałem, że odziedziczę moją dawną klasę komórkową, aby ponownie wykorzystać jej konstrukcję i logikę, ale nie mogłem znaleźć sposobu na dziedziczenie pliku XIB.

Czy należy kopiować/wklejać wszystkie widoki z jednego arkusza XIB na inny lub czy istnieje sposób na jego rozszerzenie z kilkoma zmianami?

EDIT: Przeczytałem na poniższe pytania, a oni twierdzą, że jej nie można teraz:

W przypadku jest to niemożliwe, co podejście powinniśmy używać do zrobić to skutecznie?

Odpowiedz

0

Powiel plik i wprowadź niezbędne zmiany.

Dzięki

+0

Myśląc w kontekście OO, starałem się uniknąć powielania; – Ans

0

Nic redaktor XIB może zrobić, że nie można zrobić programowo. Najprostszą ścieżką jest (zwykle) przeniesienie całego kodu do kodu, a następnie usunięcie XIB ze wszystkich celów/projektów. Wtedy możesz podklasę, jak ci się podoba.

Może to naprawdę uprościć zarządzanie zasobami dla wielu celów.

Alternatywą przeniesienia kodu do kodu jest przeniesienie modyfikowalnych fragmentów do innych instancji (wstrzymanych/przywoływanych przez komórkę). Kontroler może następnie ustawić ten atrybut przed prezentacją. Jeśli więc stylizacja i rysunek były w pewnym sensie specjalne lub konfigurowalne, wystarczy przenieść logikę do hierarchii klas, która nie polega na deserializacji XIB, a następnie uczynić te części własnymi komórkami, które zdefiniowałeś w stalówce.

0

Jeśli szukasz innego rozwiązania problemu, to proponuję programowo utworzyć niestandardową komórkę.

Wyjaśniam ci krok po kroku, to ci pomoże.

Stwórz więc klasę, która odziedziczy po UITableViewCell, i dodaj komponenty, które są potrzebne w Twojej tabelce.

tak, aby plik .h wyglądał następująco.

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 <

i Twoja.m plik będzie wyglądać następująco

// -------- ------- 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 
    } 

// -------- końcowych ------ < <

Teraz jesteś gotowy do ponownego użycia tej niestandardowej komórki w innych klasach. a także może modyfikować je zgodnie z wymaganiami.

Teraz w 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; 

} 

nadzieję, że to pomoże Ci.

1 .Also take a look on link tutorial.

2. A Closer Look at Table View Cells

+0

Myślę, że nie przeczytałeś mojego pytania; Mam już niestandardowe komórki dziedziczą z klasy UITableViewCell; Wiem, jak tworzyć niestandardowe komórki dla tableView; Potrzebuję o jeden poziom więcej dziedziczenia, nie bezpośrednio z UITableViewCell, ale z mojej własnej niestandardowej klasy komórki i co ważne, aby ponownie użyć widoku pliku xib; – Ans

0

Czy próbowali tylko instacji niestandardowego widoku komórek klasę? W ten sposób możesz mieć IBOutlets w klasie bazowej dla wszystkich komponentów interfejsu użytkownika, a w nowej podklasie możesz nimi zarządzać zgodnie z własnymi preferencjami. Byłoby tak jak instacji UIView lub UIViewController itp

0

Zdarzyło mi się raz i co zrobiłem to:

Zamiast podklasy Zrobiłem oddzielna UIView mającej stół customCell i dodał, że widok jako podrzędny w razie potrzeby. Udało mi się zmienić interfejs użytkownika customCell za pomocą klucza w customCell, aby wiedzieć, który UIViewController dodaje go jako subView.

nie jestem pewien, jak dobre jest to podejście, ale wciąż jest droga :)

Powiązane problemy