这是相当奇特的。我有一个 UIViewController 实现 UITableViewDelegate 和 UITableViewDatasource 方法。我已经附加了委托和数据源属性,并验证它们是通过日志调用的。
我的表使用单元格原型单元格,它有两个部分,我正在使用部分标题。
除了删除一个单元格(水平滑动单元格,然后应该出现删除按钮)之外,我的表格工作得很好。他们正确地显示了他们应该显示的所有单元格、部分标题、自定义单元格等......他们只是没有显示删除按钮。我可以从我的日志中看到正在调用 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]