这非常奇特。我有一个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]
答案 0 :(得分:0)
对我而言,这是一个非常简单的答案。正如我所提到的,使用标准的UITableView单元格效果很好,但我的子类却没有。事实证明,我覆盖了layoutSubviews而没有调用
[super layoutSubviews];
卫生署! X(
希望这有助于其他人。