【问题标题】:UITableView in edit mode - 'Edit' button doesn't change statusUITableView 处于编辑模式 - “编辑”按钮不会改变状态
【发布时间】:2011-03-19 21:38:19
【问题描述】:

我有一个 UIViewController 类,带有一个 tableView。在 viewDidLoad 中:

UIBarButtonItem *editIcon = [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem: UIBarButtonSystemItemEdit
                    target:self
                    action:@selector(toggleEditMode)] autorelease];

在方法'toggleEditMode'中:

-(void)toggleEditMode{
if(self.theTable.editing) {
    [theTable setEditing:NO animated:YES];
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStylePlain];
}
else if ([callsArray count]!=0){
    [theTable setEditing:YES animated:YES];
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone];
}

}

问题在于“编辑”按钮不会更改为“完成”。少了什么东西?我已经声明了所有方法:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

谢谢,

强化学习

【问题讨论】:

    标签: iphone uitableview editmode


    【解决方案1】:

    为什么不直接使用 UIViewController 的-editButtonItem 呢?并覆盖-setEditing:animated: 方法。

    // Assign the system's edit button, 
    // it will change style when different edit status.
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    
    // The editButtonItem will invoke this method.
    - (void)setEditing:(BOOL)editing animated:(BOOL)animated {
        [super setEditing:editing animated:animated];
    
        if (editing) {
             // Execute tasks for editing status
        } else {
             // Execute tasks for non-editing status.
        }
    }
    

    【讨论】:

    • 完美。刚刚将 if(editing) 更改为 if(theTable.editing) 因为 de tableView 是一个 IBOutlet。该类不是从 UITableViewController 继承的。谢谢,RL
    • 尽管这是一个老问题,但它帮助我意识到我忘记了 [super setEditing:editing animated:animated];线,这就是为什么我的不工作。 ;) 感谢您发布此内容。
    【解决方案2】:

    这是因为您在切换模式时只是设置了按钮的样式(而不是其文本)。您需要这样做(或等效):

    -(void)toggleEditMode{
        self.navigationItem.rightBarButtonItem.title = self.tableView.editing ? @"Done" : @"Edit";
    

    【讨论】:

    • 为什么不能像继承自 UITableViewController 的类一样工作?我不能将按钮分配给表格并像那样工作吗?
    【解决方案3】:

    你确定callsArray 不为空?

    toggleEditMode 中放置一个断点,看看那里会发生什么。

    编辑

    好的,了解你的问题后,看看这个thread

    【讨论】:

    • 是的,我确定。该表进入编辑模式,当我删除一行时它可以工作。那不是问题。问题是当类是 UITableViewController 类时,“编辑”按钮不会改变它的名称,而“完成”会改变它的名称。相反,我的类是一个 UIViewController,里面有一个表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2012-04-13
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多