开发者

Add editing elements to UITableViewCell

I have a couple of rows in a table view which I like to edit.

I thought that setEditing method would give me a Edit and Delete button, but it only shows a Delete button. Because I don't have a detail view controller that's going to be pushed in didSelectRowAtIndexPath I thought I could show a couple of editing elements in the selected cell.

I need to add three buttons to specify priority on assignments: Low, High and Medium priority. This means that I have to change the height of the selected cell to make room for these buttons, I think that's rather easy to do.

What I'm wondering is if this is the correct path to choose?

I have done quite a lot research today without finding examples of how other have solved editing in a UITableViewCell. If you edit a contact in the Contacts app in the iPhone the UITableViewCells changes to enable quick and easy editing, that's what I'm looking for.

So what do you have for tips for me regarding this question?

Edit #1

My code in didSelectRowAtIndexPath is:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    Cell *selectedCell = (Cell *)[tableView cellForRowAtIndexPath: indexPath];

    UIButton *btn = [UIButton buttonWithType: UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(0, 0, 50, 100);
    btn.titleLabel.text = @"Set this item to High Priority";
    btn.backgroundColor = [UIColor greenColor];
    [selectedCell.contentView ad开发者_如何学JAVAdSubview: btn];

    self.editing = YES;

    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject: indexPath] withRowAnimation:UITableViewRowAnimationFade];
}

Code for heightForRowAtIndexPath:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    Cell *cell = nil;
    if (self.editing)
        cell = (Cell *)[tableView cellForRowAtIndexPath: indexPath];
    else
        cell = nil;

    BOOL expandCell = NO;
    NSInteger expandationHeight = 0;

    if (cell != nil)
    {
        for (UIButton *btn in cell.contentView.subviews)
        {
            NSLog(@"A button was found.");
            expandationHeight = 70;
            expandCell = YES;
        }       
    }

    return expandationHeight + heightOfOtherElements;
}

When I click at a cell nothing happends but everything becomes disabled, I can't click any elements on the hole view. This has something to do with [tableView cellForRowAtIndexPath: indexPath], because if I uncomment that line the UI does not become disabled.

What am I doing wrong?


That's not too complicated though it requires some stuff.

You want to change the content of one cell or of all cells?

To specify a specific height for one cell, use the - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath delegate method.

It is called for each cell each time the table view is displayed. If you want to change a single row, call reloadRowsAtIndexPaths:withRowAnimation: method from UITableView. If you want to update all cells, simply use - (void)reloadData method.

You can also access a specific cell using - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath method from UITableView. Then you can reconfigure it to add various elements on it, as you want.

Thus, when a cell is selected, check whether you have to edit it or not, then :

  • update your cell get from cellForRowAtIndexPath
  • be sure your method tableView:heightForRowAtIndexPath: will return the good height
  • tell the table view to update the view using reloadRowsAtIndexPaths:withRowAnimation:
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜