2013-07-10 66 views
0

這很奇特。我有一個UIViewController實現了UITableViewDelegate和UITableViewDatasource方法。我附加了委託和數據源屬性,並驗證它們是通過日誌調用的。刪除UITableViewCell的問題

我的表格正在使用單元格原型單元格,它有兩個部分,我正在使用部分標題。

我的表格工作良好,除了刪除單元格(水平滑動單元格,然後刪除按鈕應該出現)。他們正在正確顯示他們應該的所有單元格,部分標題,自定義單元格等......他們只是沒有顯示刪除按鈕。我可以從我的日誌中看到,正在調用editingStypeForRowAtIndexPath和canEditRowAtIndexPath,但刪除按鈕從不出現。

但是,如果我編輯cellForRowAtIndexPath來返回標準的UITableViewCells而不是我的子類,則會出現刪除按鈕。 UITableViewSubclass需要支持什麼?過去,我沒有做過類似的代碼工作。

看看我的UITableViewCell子類:它只是有幾個文本標籤,圖像視圖和坐在背景圖像上的按鈕。沒有什麼不尋常的。

任何建議,歡迎

這裏是我的電視代碼:

#pragma mark UITableViewDataSource 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 
    return 2; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    if(section == kInvitesReceivedSection){ 
     return self.invitesReceived.count; 
    } 
    else if(section == kInvitesSentSection){ 
     return self.invitesSent.count; 
    } 
    return 0; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    if(indexPath.section == kInvitesReceivedSection){ 
     SMInviteReceivedTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SMInviteReceivedTableViewCell"]; 
     cell.invite = self.invitesReceived[indexPath.row]; 
     cell.delegate = self; 
     return cell; 
    } 
    else if(indexPath.section == kInvitesSentSection){ 
     SMInviteSentTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SMInviteSentTableViewCell"]; 
     cell.invite = self.invitesSent[indexPath.row]; 
     cell.delegate = self; 
     return cell; 
    } 

// Swap out for these and the delete button will appear 
//  UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
//  cell.textLabel.text = [NSString stringWithFormat:@"%d", indexPath.row]; 
//  return [[UITableViewCell alloc]init]; 
} 

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

    // programmatcially generate UIViews 
    ... 
    return headerView; 
} 


- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ 

    if(section == 0 && self.invitesReceived.count == 0){ 
     return 0; 
    } 
    else if(section == 1 && self.invitesSent.count == 0){ 
     return 0; 
    } 
    return 44; 
} 

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    NSLog(@"%s:%d indexPath=%@", __FUNCTION__, __LINE__, indexPath); 
     return UITableViewCellEditingStyleDelete; 

} 

// This is called when the user swipes across a cell and presses delete. 
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ 
    NSLog(@"%s:%d indexPath=%@", __FUNCTION__, __LINE__, indexPath); 
    if(indexPath.section == kInvitesReceivedSection){ 
     // delete invite 
    } 
    else if(indexPath.section == kInvitesSentSection){ 
     // delete invite 
    } 
} 

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSLog(@"%s:%d indexPath=%@", __FUNCTION__, __LINE__, indexPath); 
    // Return YES if you want the specified item to be editable. 
    return YES; 
} 

#pragma mark UITableViewDelegate 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
    // do stuff here 
} 

編輯:其實,我注意到這些日誌的時候我刷上一個單元格。但是,當我在另一個單元上滑動時,沒有日誌。這表示刪除按鈕處於活動狀態,但不可點擊。爲什麼?

2013-07-10 08:24:57.400 Heartstream[35280:c07] -[SMInvitesViewController tableView:editingStyleForRowAtIndexPath:]:337 indexPath=<NSIndexPath 0xc44b180> 2 indexes [0, 0] 
2013-07-10 08:24:57.400 Heartstream[35280:c07] -[SMInvitesViewController tableView:canEditRowAtIndexPath:]:369 indexPath=<NSIndexPath 0xc44b180> 2 indexes [0, 0] 
2013-07-10 08:24:57.401 Heartstream[35280:c07] -[SMInvitesViewController tableView:editingStyleForRowAtIndexPath:]:337 indexPath=<NSIndexPath 0xc44b1b0> 2 indexes [0, 0] 
2013-07-10 08:24:57.401 Heartstream[35280:c07] -[SMInvitesViewController tableView:canEditRowAtIndexPath:]:369 indexPath=<NSIndexPath 0xc44b1b0> 2 indexes [0, 0] 
2013-07-10 08:24:57.401 Heartstream[35280:c07] -[SMInvitesViewController tableView:canEditRowAtIndexPath:]:369 indexPath=<NSIndexPath 0xc44b380> 2 indexes [0, 0] 
2013-07-10 08:24:57.401 Heartstream[35280:c07] -[SMInvitesViewController tableView:editingStyleForRowAtIndexPath:]:337 indexPath=<NSIndexPath 0xc44b380> 2 indexes [0, 0] 

回答

0

對我來說很糟糕,而且答案很簡單。正如我所提到的,使用標準的UITableView單元格效果很好,但我的子類沒有。事實證明,我覆蓋layoutSubviews並沒有打電話

[super layoutSubviews];

Doh! X(

希望這可以幫助別人。