1

我目前有一个有 8 行的表,每行在右侧都有一个标签,在左侧有一个按钮。我希望我可以隐藏所有按钮,直到用户按下右上角的“编辑”按钮,然后它们会出现,允许用户与每个表格单元格进行交互。我不知道这是否可能,因为它们在UITableViewCells 中,或者是否有更简单的方法可以为每个单元格召唤一个按钮

更新

好的,所以我已经放置了所有隐藏的属性,似乎没有错误,但应用程序无法识别其中任何一个。尽管它们被设置为最初隐藏,但这些按钮仍然不隐藏。这是我的代码

这是我的表格单元格代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:  (NSIndexPath      *)indexPath
{
    static NSString *CellIdentifier = @"BlockCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier   forIndexPath:indexPath];

    cell.textLabel.text = @"Free Block";

    UIButton*BlockButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    BlockButton.frame = CGRectMake(225.0f, 5.0f, 75.0f, 35.0f);
    [BlockButton setTitle:@"Change" forState:UIControlStateNormal];
    [BlockButton addTarget:self action:@selector(Switch:) forControlEvents:UIControlEventTouchUpInside];

    Blockbutton.backgroundColor = [UIColor colorWithRed:102/255.f
                                                 green:0/255.f
                                                 blue:51/255.f
                                                 alpha:255/255.f];
    Blockbutton.hidden = YES;
    [cell addSubview:BlockButton];
    return cell;
}

这是我的方法代码:

- (IBAction)Editmode:(UIButton *)sender 
{
    Blockbutton.hidden = !Blockbutton.hidden;
    [self.tableView reloadData];
}

关于可能是什么问题的任何想法或想法?

4

4 回答 4

3

UITableViewCell如果您还没有子类,则需要创建一个子类。在该类中,覆盖setEditing:animated:,如果新值为YES,则启用/添加/取消隐藏按钮。

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated:animated];

    if (editing) {
        // add your button
        someButton.hidden = NO;

    } else {
        // remove your button
        someButton.hidden = YES;
    }
}

这将是可选的,但如果是 ,我们鼓励您为更改设置animated动画YES

注意:这假设您已经连接了编辑按钮以更改UITableView. 如果不这样做,请调用setEditing:animated:按钮UITableView操作。这将自动调用setEditing:animated:每个可见的表格单元格。

于 2013-04-29T19:12:57.403 回答
0

取一个定义是否显示删除按钮的 BOOL 变量,使用此 BOOL var 来表示 btnName.hidden = boolVar,最初使 boolVar = NO,当用户点击编辑切换 bool var 并重新加载表格视图时。

于 2013-04-29T19:11:59.223 回答
0

这里的诀窍是要记住,表格的单元格由cellForRowAtIndexPath:. 您可以通过发送 table 来重新调用该方法reloadData:

因此,只需保留一个 BOOL 实例变量/属性。使用按钮切换该实例变量并调用reloadData:. 如果在cellForRowAtIndexPath:调用时实例变量为 YES,则将按钮设置hidden为 YES;如果否,则为否。

于 2013-04-29T19:12:09.213 回答
0

另一种选择是在 cellForRowAtIndexPath 方法中测试您是否处于编辑模式。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     UITableViewCell *cell = //(obtain your cell however you like)
     UIButton *button = cell.button; //(get button from cell using a property, a tag, etc.)
     BOOL isEditing = self.editing //(obtain the state however you like)
     button.hidden = !isEditing;
     return cell;
}

并且每当您进入编辑模式时,都会重新加载 tableView 数据。这将使表格视图再次请求单元格,但在这种情况下,按钮将设置为不隐藏。

- (void)enterEditingMode {
    self.editing = YES;
    [self.tableView reloadData];
}
于 2013-04-29T19:36:13.270 回答