0

这是相当奇特的。我有一个 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]
4

1 回答 1

0

我的大笨蛋和非常简单的答案。正如我所提到的,使用标准 UITableView 单元效果很好,但我的子类没有。原来我覆盖了 layoutSubviews 并没有调用

[超级布局子视图];

嗬!X(

希望这对其他人有帮助。

于 2013-07-10T15:57:02.203 回答