2013-05-07 98 views
0

我已經從UITableView創建了一個派生類,它將包含一些自定義邏輯。但我不知道如何讓它填充單元格。 h。UITableView與自定義類

h。文件:

@interface MetricsView : UITableView { 
    @private 
    NSMutableArray *_items; 
} 
@end 

m。文件:

@implementation MetricsView 

    //this gets called 
    - (id)initWithCoder:(NSCoder *)aDecoder 
    { 
     self = [super initWithCoder:aDecoder]; 
     if (self) { 
      _items = [[NSMutableArray alloc]initWithObjects:@"Name:", nil]; 
     } 
     return self; 
    } 

//this never gets called?? 
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    { 
     return 1; 
    } 

    //this never gets called?? 
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    { 
     return [_items count]; 
    } 

//this never gets called?? 
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     NSString *cellIdentifier = @"MetricsViewCell"; 

     MetricsViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

     [cell setupWithName:[_items objectAtIndex:0] withData:[_items objectAtIndex:0]]; 
     return cell; 
    } 

    @end 

我在我的ViewController頂部創建了MetricsView。這裏是故事情節的樣子:

Here's what storyboard looks like:

我需要裏面添加ViewController.m一些自定義的初始化代碼?

謝謝。

回答

1

那麼讓我們把事情弄直。您的UITableView是視圖。你的確可以繼承它,但它似乎並不是你想要的。我覺得你想要做的是創建你自定義的UITableViewdelegatedataSource。意味着遵守這兩個協議的自定義類。你不需要繼承你的UITableView,但你需要設置你的自定義類作爲你的代理UITableView。並且在這個類中,您將能夠實現您嘗試實現的方法(在索引路徑中爲行打開,在部分中行的數量,部分的數量)。你需要的是將你的tableview獲取水的井(水是關於放入池中的信息以及要創建多少個池的信息)進行子類化。我希望這個能幫上忙!

+0

我想我現在明白了,謝謝。 – 2013-05-07 21:38:31

+0

所以現在我收到「的malloc:***錯誤對象0x75610453:指針被釋放沒有被分配 ***在malloc_error_break斷點設置爲調試」後,我打電話的setDataSource。我的MetricsView不再是自定義類,只是默認的UITableView。我是否需要調用metricsView alloc自己? – 2013-05-07 21:50:39

+0

哪來現在的工作,感謝傢伙! – 2013-05-07 22:13:31

1
//this never gets called?? 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 

即,另一方法是數據源方法。除非將此類設置爲表視圖的數據源,否則不會調用它們。

奇怪的是,你已經把這段代碼放入了UITableView子類本身。好吧,這很奇怪,它違反了MVC,但如果你真的想要,你可以做到。但是,您必須將UITableView子類設置爲其自己的數據源(並且可能是其自己的代理)。這不會自行發生,你必須做。

後來編輯:但是,一般來說,我會首先懷疑UITableView的子類化的需求和合意性。我很難想到這樣做會有用的情況。只需將您的桌面視圖放入界面,將其delegatedatasource插座掛接到View Controller,即可完成。現在視圖控制器得到numberOfSectionsInTableView:和其他調用,正如它應該。

+0

我想他只是沒有想到UITableView子類本身和委託/數據源之間的區別。 – 2013-05-07 20:36:19

+0

@Nicolas我隱約明白這一點。剛開始學習目標C. – 2013-05-07 20:59:50

+0

是否將添加到我的MetricsView接口,然後通過故事板以某種方式鏈接它? – 2013-05-07 21:02:03