在自定义UITableViewCell中隐藏UIButton

时间:2013-06-12 15:16:09

标签: ios uitableview custom-cell

在我的tableview中,我有几个不同的自定义单元格。在其中一个,它有一个按钮。此按钮调出另一个视图控制器。但是,在tableview完全加载之前不需要它。在cellForRowAtIndexPath中,我设置了所有不同的自定义单元格。我可以取消注释[buttonCell.myButton setHidden:YES];它会隐藏我的按钮。见下文。

else if (indexPath.section == 3)
{
    ButtonCell *buttonCell = [tableView dequeueReusableCellWithIdentifier:@"ButtonCell"];

    //[buttonCell.myButton setHidden:YES];
    cell = buttonCell;
}
    return cell;

但是,我希望在tableview加载后取消隐藏按钮。我在另一个调用reloadData的方法中完成了所有数组的加载。在那种方法中,我尝试取消隐藏按钮。

[ButtonCell.myButton setHidden:NO];

但是编译器给了我一个警告,就是在ButtonCell中找不到属性myButton。有没有人有任何想法如何取消隐藏我的按钮。我做错了什么,我得不到什么!感谢你的帮助。

编辑1

我的按钮单元类是...... 。H     #import

@interface ButtonCell : UITableViewCell

@property (strong, nonatomic) IBOutlet UIButton *myButton;
- (IBAction)YDI:(id)sender;


@end

的.m

#import "ButtonCell.h"
#import "AnotherWebViewController.h"

@implementation ButtonCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
    // Initialization code
}
return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];

// Configure the view for the selected state
}

- (IBAction)YDI:(id)sender
{

}

@end

编辑2

在大家的帮助下回答(谢谢大家)我已经进一步了解,但按钮没有显示出来。所以我仍然隐藏了cellForRowAtIndexPath中的按钮,该按钮应该正常工作。然后在我的方法中,我重新加载数据,我把下面的代码。

NSIndexPath *index = [NSIndexPath indexPathForRow:0 inSection:3];
ButtonCell *buttonCell = (ButtonCell *) [self.tableView cellForRowAtIndexPath:index];
[buttonCell.myButton setHidden:NO];

带按钮的ButtonCell始终是第四部分(将第一部分计为0),它只有一行。任何其他帮助将不胜感激。几乎就在那里!

编辑3 得到它了!然而,由于评论,我能够弄明白。感谢@ A-Live。虽然我知道如何通过ElJay知道如何在cellForRowAtIndexPath之外的方法中获取单元格。所以我给他检查,因为我学到了新的东西,这就是为什么我们发布问题。所以在我的方法中,cellForRowAtIndexPath是我隐藏/显示按钮的地方。我的应用程序中有一个名为finished的BOOL,它最初设置为true。当表视图结束加载时,它被设置为false。所以我只是用这个bool来显示/隐藏按钮。

else if (indexPath.section == 3)
{
    ButtonCell *buttonCell = [tableView dequeueReusableCellWithIdentifier:@"ButtonCell"];

    if (!_finished)
    {
        [buttonCell.myButton setHidden:YES];
    }else{
        [buttonCell.myButton setHidden:NO];
    }

    cell = buttonCell;
}
    return cell;

这再一次只是我的cellForRowAtIndexPath方法的一部分。再次感谢所有的帮助。看到这么多答案,我感到很惊讶!感谢。

5 个答案:

答案 0 :(得分:2)

使该属性可以公开访问。

@property (nonatomic, retain) UIButton *myButton;

然后在cellForRowAtIndexpath

ButtonCell *buttonCell =(ButtonCell *) [tableView dequeueReusableCellWithIdentifier:@"ButtonCell"];

答案 1 :(得分:1)

可能是大写错误?

[buttonCell.myButton setHidden:NO]; // Trying to access instance variable

而不是:

[ButtonCell.myButton setHidden:NO]; // Trying to access class variable

答案 2 :(得分:1)

myButton属于一个单元格。您需要获取该UITableViewCell的实例,然后您可以取消隐藏它,这假设您要修改cellForRowAtIndexPsthwillDisplayCell之外的单元格对象。

答案 3 :(得分:1)

在您的代码中

[ButtonCell.myButton setHidden:NO];

您正在尝试使用对象类名而不是对象名。您需要获取包含按钮的单元格

buttonCell = [tableView cellForRowAtIndexPath:indexPath];
buttonCell.myButton.hidden = NO;

答案 4 :(得分:1)

您是否在ButtonCell的头文件中拥有该属性的公共访问器?类似@property (nonatomic, retain) UIButton *myButton;的东西 这就是我通常看到这样的编译器警告的方式。