代码之家  ›  专栏  ›  技术社区  ›  Senseful

在iPhone上点击“滑动删除”和“编辑”按钮

  •  8
  • Senseful  · 技术社区  · 14 年前

    我将viewController设置为按Apple建议的方式使用“编辑”按钮:

    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    

    setEditing:animated: editing 值(即用户可以点击添加新项的行)。

    当用户在单元格上滑动时(不在编辑模式下),它也会调用 s编辑:动画: ,这将导致我的代码错误地添加此“新行”。仅当整个viewController处于编辑模式时(即,当点击编辑按钮时),它才应显示新行。

    5 回复  |  直到 14 年前
        1
  •  11
  •   Senseful    14 年前

    如果你实施 tableView:willBeginEditingRowAtIndexPath: tableView:didEndEditingRowAtIndexPath: ,方法调用的行为将更改。。。

    它将不再呼叫 setEditing:animated: ,则必须处理上述两种方法内部的所有编辑更改逻辑。作为副作用, self.editing 将不再是 YES 当一个刷卡手势被调用时。这是因为 s编辑:动画: 负责设置 self.editing = YES

        2
  •  3
  •   ilent2    5 年前

    使用 UITableViewDelegate 方法 tableView:willBeginEditingRowAtIndexPath: . 根据文件:

    YES (因此进入编辑阶段) delete“模式表视图不显示任何插入、删除和重新排序 控制。此方法使代理有机会调整应用程序的用户权限 删除按钮),表视图调用 tableView:didEndEditingRowAtIndexPath:

    ,设置使用滑动删除触发编辑模式的标志。然后,在 setEditing:animated: 以便在按下编辑按钮时执行默认操作。

        3
  •  0
  •   Eiko    14 年前

    我不知道您的“新行”是关于什么的,但是您可以在调用setEditing之前将edit按钮附加到设置标志的helper方法上,在那里您可以检查是否设置了所述标志并相应地进行操作。然后清除方法末尾的标志。

        4
  •  0
  •   Nirmit Patel    14 年前

    理智的你必须超越编辑:动画:方法。或者你也可以像Eiko建议的那样,在这个方法中设置flag。

    或者其他方式是

    将目标添加到该按钮并根据需要实现功能

        5
  •  0
  •   malhal Benzy Neez    6 年前

    willBeginEditingRowAtIndexPath (记住调用super,否则将不进入编辑模式)并将索引路径存储在属性中。覆盖 setEditing 并且您可以检查属性,并且只有当insert行为nil时(即当用户没有刷卡时)才能添加insert行。

    @interface MasterViewController ()
    
    @property (nonatomic, strong, nullable) NSIndexPath *tableViewEditingRowIndexPath;
    
    @end
    
    @implementation MasterViewController
    
    - (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath{
        self.tableViewEditingRowIndexPath = indexPath;
        [super tableView:tableView willBeginEditingRowAtIndexPath:indexPath]; // calls setEditing:YES
    }
    
    -(void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath{
        [super tableView:tableView didEndEditingRowAtIndexPath:indexPath]; // calls setEditing:NO
        self.tableViewEditingRowIndexPath = nil;
    }
    
    - (void)setEditing:(BOOL)editing animated:(BOOL)animated{
        [super setEditing:editing animated:animated];
        if(self.tableViewEditingRowIndexPath){
             // we are swiping
             return;
        }
        if(editing){
            // insert row for adding
        }
        else{
            // remove row for adding
        }
    }