UITableView幻灯片不可编辑行与可编辑行Xcode iPhone

时间:2012-01-31 16:54:53

标签: iphone objective-c ios xcode uitableview

我正在开发一款iPhone应用程序,我遇到了一个问题。我有一个带有一些可编辑行的UITableView(

 -(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{ )

和一个不可编辑的行。如果我单击编辑,可编辑行会向右滑动一点,左侧会有一个红色圆形按钮,但不可编辑的行根本不会滑动。有没有办法将它滑到右边但没有左边的红色按钮?目前看起来并不好看。我希望有人可以帮助我:)

2 个答案:

答案 0 :(得分:1)

我不确定更改tableView的默认行为是否是个好主意。 但如果你真的想,你可以使用缩进。

// Might be target of button
- (void) setEditingMode
{
    tableView.editing = YES;
    [tableView reloadData];
}

// Might be target of button
- (void) resetEditingMode
{
    tableView.editing = NO;
    [tableView reloadData];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell* cell = ...;
    ....
    Boolean cellIsEditable = ...;
    if( tableView.editing && !cellIsEditable )
    {
        cell.indentationWidth = ...; // (please experiment to find the exact value)
        cell.indentationLevel = 1;
    }
    else
    {
        cell.indentationLevel = 0;
    } 
}

答案 1 :(得分:0)

对UITableViewCell进行子类化并自行滑动不可编辑的行。

@interface MyHistoryTableViewCell : UITableViewCell
@end

@implementation MyHistoryTableViewCell : UITableViewCell

#define CELL_SLIDE_WIDTH    32  // found empirically
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];
    if ( self.editingStyle == UITableViewCellEditingStyleNone ) { // not editable
        CGRect frame = self.frame;
        UITableView *tableView = ((UITableView *)(self.superview));
        if ( tableView.editing ) { // going to editing mode
            frame.origin.x = CELL_SLIDE_WIDTH;
            frame.size.width = tableView.frame.size.width - CELL_SLIDE_WIDTH;
        } else {  // ending editing
            frame.origin.x = 0;
            frame.size.width = tableView.frame.size.width;
        }
        [UIView animateWithDuration:0.3 animations:^{ // match the tableView slide duration
            self.frame = frame;
        }];
    }
}
@end

如果你有需要锚定在单元格右侧的子视图(例如,一个不应该滑动的按钮),那么

mySubview.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; // anchors to the right margin

此外,在设置子视图的frame.origin.x时,您必须具有创造性。我尝试了很多价值观,直到找到了有用的东西(这个价​​值对我来说毫无意义)。