2012-10-14 38 views
0

的風格我有另一個類設置一個UITableView

MyPocketTableView * myPocketTableView = [[MyPocketTableView alloc]initWithFrame:CGRectMake(85, 153, 235, 250) style:UITableViewStyleGrouped]; 

但是我打電話一個UITableView類,在UITableViewClass init方法不會讓我做這件事。

@implementation MyPocketTableView 

- (id) initWithFrame:(CGRect)frame style:(UITableViewStyle)style { 
    self = [super initWithFrame:frame]; 
    self = [super initWithStyle:style] 

    if (self) { 

     //[self setFrame:CGRectMake(85, 153, 235, 250)]; 
     self.dataSource = self; 
     self.delegate = self; 

    } 
    return self; 
} 

我不能添加樣式:(UITableViewStyle)樣式到init方法定義,我也可以做self = [super initWithStyle:style],因爲它抱怨說

爲「UITableView的」不可見@interface聲明的選擇initWithStyle。

,這是有創建的類時,默認init方法是- (id) initWithFrame:(CGRect)frame。 MyPocketTableView是一個子類的UITableView的。

@interface MyPocketTableView : UITableView <UITableViewDataSource,UITableViewDelegate> 

回答

2

您需要的接口設置爲UITableViewController,然後使用initWithStyle:

此外,在執行以下操作,沒有必要設置UITableView的協議代表

@interface MyPocketTableView : UITableViewController 

然後,您可以撥打:

MyPocketTableView * myPocketTableView = [[MyPocketTableView alloc] initWithStyle:UITableViewStyleGrouped]; 

還有以下幾點:

- (id) initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 
     [self setFrame:CGRectMake(85, 153, 235, 250)]; 
    } 
    return self; 
} 

您也可以使用以下(例如)自定義的方法:鍵值爲您所呼叫:

self = [super initWithStyle:UITableViewStyleGrouped];

- (id) initWithSomeCustomMessage:(NSString*)message 
{ 
    self = [super initWithStyle:UITableViewStyleGrouped]; 
    if (self) { 
     [self setFrame:CGRectMake(85, 153, 235, 250)]; 
     self.customMessage = message; 
    } 
    return self; 
} 
+0

這是如此基本的...只需使用:self = [super initWithFrame:frame style:style];我不知道爲什麼這個答案被接受......它促進了不好的做法。 –

+1

@BrandonBrodjeski你昨天留下評論贊揚我的答案,甚至投了我的答案!然後你反覆投票並刪除你的評論(我提醒你提出了這個答案。)另一個說明,這種不好的做法是怎麼樣的?這是它應該如何完成的。另一方面,你的回答甚至不涉及設置表格視圖風格的主題!您應該更仔細地閱讀Apple文檔,並且應該閱讀本文提到的原始問題。 – WrightsCS

+0

我太快閱讀你的答案,並且犯了一個錯誤就是讚美它。當調用[super initWithFrame:style:]時,調用[super initWithStyle:]然後設置框架是絕對沒有意義的。 –

1

你設置的 「自我」 的兩倍。這將導致「自我」被覆蓋

self = [super initWithFrame:frame]; 
self = [super initWithStyle:style]; 

爲了維持。‘INIT鏈’你需要調用相同的‘初始化’功能,你在這樣的:

- (id) initWithFrame:(CGRect)frame style:(UITableViewStyle) style { 

    self = [super initWithFrame:frame style:style]; 
    if(self) { 

     self.dataSource = self; 
     self.delegate = self; 

    } 
    return self; 

} 
2
  1. 你需要在視圖控制器設置爲MyPocketTableView

    MyPocketTableView * myPocketTableView = [[MyPocketTableView alloc] initWithStyle:UITableViewStyleGrouped]; 
    
  2. 之後,使用下面的代碼MyPocketViewco ntroller

    - (id) initWithStyle:(UITableViewStyle)style 
    { 
         self = [super initWithStyle:style]; 
         if (self) { 
           [self setFrame:CGRectMake(85, 153, 235, 250)]; 
         } 
         return self; 
    } 
    
  3. 不要忘了添加的UITableView委託和數據源MyPocketViewController類