這很奇特。我有一個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]