代码之家  ›  专栏  ›  技术社区  ›  phil swenson

如何在iPhone UITableView上检测编辑模式

  •  13
  • phil swenson  · 技术社区  · 16 年前

    http://grab.by/It0

    从文档来看,如果我实现了:

    - (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath
    

    有没有发现这个的想法?我想这样做的原因是,在删除模式下,我想在左上角挂上一个“全部删除”按钮。

    5 回复  |  直到 10 年前
        1
  •  20
  •   Satyam    7 年前

    它可能没有像您预期的那样工作,因为 willBeginEditingRowAtIndexPath: 之前 编辑开始了。

    editing 财产:

    @property(nonatomic, getter=isEditing) BOOL editing
    

    如果您想在按下“编辑”按钮时执行某些操作,则需要实现setEditing方法:

     - (void)setEditing:(BOOL)editing animated:(BOOL)animated
    

    你会在里面找到的 UIViewController . (嗯,那是最有可能的地方;还有其他的。)

    相应地使用以下代码:

    open var isEditing: Bool // default is NO. setting is not animated.
    
    open func setEditing(_ editing: Bool, animated: Bool)
    
        2
  •  16
  •   Jonathan.    14 年前

    当对tableviewcontroller进行子类化时(大多数人大部分时间都在做什么,因为你必须重写它的委托方法才能将数据放入其中…),你可以重写setEditing:animated:方法来获取编辑状态的更改。

    - (void)setEditing:(BOOL)editing animated:(BOOL)animated {
        NSLog(@"Editing %i", editing);
        [super setEditing:editing animated:animated];
    }
    

    它将状态变化传递到超级类,但是让你跳到中间并检测变化,或者改变它,如果你想要……

        3
  •  3
  •   Jordan Snyder    12 年前

    我的用例和你的不同。我只是想在“删除”按钮显示时隐藏标签,以便在“删除”按钮滑入时其他单元格内容不会与标签重叠(我使用的是UITableViewCellStyleValue2,左边是蓝色标签,右边是黑色标签。)

    - (void)willTransitionToState:(UITableViewCellStateMask)state {
        [super willTransitionToState:state];
        if (state & UITableViewCellStateShowingDeleteConfirmationMask) {
            // showing delete button
            [self.textLabel setAlpha:0.0f]; // <-- I just wanted to hide the label
        }
    }
    
    - (void)didTransitionToState:(UITableViewCellStateMask)state {
        if (!(state & UITableViewCellStateShowingDeleteConfirmationMask)) {
            // not showing delete button
            [self.textLabel setAlpha:1.0f]; // <-- show the label
        }
    }
    
        4
  •  3
  •   Sam B    12 年前

    肯德尔的答案是有效的。我是这样做的。

    // Override to support conditional editing of the table view.
    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
        // Return NO if you do not want the specified item to be editable.
        NSLog(@"Can edit %d", tableView.editing);
        if (tableView.editing == 1) {
            [self.editButtonItem setTitle:EDIT_BUTTON_TITLE];
        }else {
            [self.editButtonItem setTitle:DONE_BUTTON_TITLE];
        }
    
        return YES;
    }
    
        5
  •  3
  •   Dharmesh Dhorajiya    11 年前

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

    我不认为压倒一切 setEditing:animated: 这是有道理的,因为您必须子类化 UITableView 这是额外的工作,是一个不需要其他原因的类,更不用说它必须将编辑已打开的事实传达给控制器。

    另一个选择是自己添加编辑按钮——这是一个内置的按钮 UIBarButtonSystemItem ,您可以添加它,然后让它调用您自己的方法,在该方法中,您可以执行特定的操作,然后调用 上 它本身

    编辑背后的理念是,当启用编辑时,每个单元格都会被告知进入编辑模式,并被询问是否有任何应应用的特定编辑控件。因此,理论上,除了改变单元格的外观外,不需要检测进入编辑模式的条目。当进入编辑模式时,您想做什么?