2013-04-29 129 views
1

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

UPDATE

好了,所以我已经摆在所有隐藏属性,似乎没有错误,但应用程序不承认任何。尽管它们被设置为初始隐藏,但按钮仍然未被隐藏。这里是我的代码

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

- (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]; 
} 

任何想法或想法,可能是什么问题?

+0

这是可能的。按钮有一个“隐藏”属性,您可以将其设置为YES或NO。 – matt 2013-04-29 19:08:51

回答

0

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

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

+0

谢谢你的回复,但我似乎有一个问题 – Hammy 2013-04-29 19:36:07

+0

对不起,我不小心打入和评论,反正这听起来可能真的很愚蠢,但我在哪里可以找到我的UITableViewController的名称或指针,我不完全知道什么对象正在调用方法,所以我得到一个“没有已知的选择器reloadData类方法”错误消息在我的代码行,只是说[[UITableView reloadData];> – Hammy 2013-04-29 19:45:35

+0

它是'[self.tableView reloadData] ' – matt 2013-04-29 19:47:28

0

取一个BOOL变量,它定义是否显示删除按钮,使用BOOL var to为btnName.hidden = boolVar,最初使用boolVar = NO,当用户点击编辑时切换bool var并重新载入tableview。

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; 
    } 
} 

这将是可选的,但我们鼓励你动画的变化,如果animatedYES

注意:这假定你已经编辑按钮已经挂钩了UITableView编辑模式的改变。如果不这样做,请在按钮操作中拨setEditing:animated:UITableView。这将在每个可见表格单元格上自动调用setEditing:animated:

+0

太棒了!这对我来说非常合适。我只是想补充说,整个if语句可以用一行代码替换:'someButton.hidden =!editing' – alondono 2014-11-20 11:59:03

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]; 
}