2012-10-05 47 views
5

我有一個從UITableViewCell繼承的自定義表格單元格。它工作正常。如何在iOS項目中繼承XIB文件?

現在我必須爲其他屏幕製作同樣類型的單元格,但只需稍作修改即可。我計劃繼承我的舊單元類來重用它的設計和邏輯,但是我找不到如何繼承xib文件的方法。

我應該從一個xib複製/粘貼所有視圖到其他還是有一種方法來擴展它幾乎沒有變化?

編輯:我已閱讀下列問題,他們公司不可能馬上聲稱:

如果這是不可能的,我們應該用什麼樣的方法來這樣做有效嗎?

回答

0

您應該複製文件並進行必要的更改。

謝謝

+0

一邊想着在OO語境,我試圖避免重複; – Ans

0

沒有什麼XIB編輯器可以做的,你不能以編程方式做。最簡單的路徑是(通常)將其全部移至代碼,然後從所有目標/項目中刪除XIB。然後,你可以繼承你的喜好。

作爲獎勵,這可以真正簡化多個目標的資源管理。

將其移動到代碼的另一種方法是將可修改部分移動到其他實例(由單元格保存/引用)。控制器可以在演示之前設置該屬性。因此,如果程式化和繪圖在某些方面是特殊或可定製的,那麼只需將該邏輯移出到不依賴於XIB反序列化的類層次結構,然後製作在nib中定義的單元的那些部分屬性。

0

如果您正在爲您的問題尋找其他解決方案,那麼我建議您以編程方式創建自定義單元格。

我正在一步一步解釋你,這會幫助你更好。

所以爲了創建一個繼承自UITableViewCell的類,並在tabelCell中添加需要的組件。

所以你的.h文件看起來像這樣。

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

和你的。M檔看起來像這樣

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

現在你準備在你的其他類重用這個自定義單元格。也可以根據需要進行修改。

現在的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; 

} 

希望這會幫助你。

1 .Also take a look on link tutorial.

2. A Closer Look at Table View Cells

+0

我覺得你沒看過我的問題;我已經從UITableViewCell類,繼承自定義單元格;我知道如何爲tableView製作自定義單元格;我需要一個級別的繼承,不是直接來自UITableViewCell,而是來自我自己的自定義單元類,重要的是重用xib文件視圖; – Ans

0

您是否嘗試過只子類的自定義單元格視圖類?這樣,你可以有IBOutlets爲所有UI組件的基類,並在新的子類,只要你想,按新的行爲就可以對其進行管理。這將是就像繼承一個UIView或一個UIViewController等

0

它發生在我一次,我所做的是:

相反子類的我做了一個單獨的具有表UIView與customCell並補充說,視圖子視圖需要的地方。我能夠在customCell中使用更改customCell的UI,以瞭解哪個UIViewController正在將其添加爲子視圖。

我不知道這種方法有多好,但仍然是一個辦法:)

相關問題