0

在我的表格视图中,我有几个不同的自定义单元格。在其中一个中,它有一个按钮。这个按钮会弹出另一个视图控制器。但是,在 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 里面是我隐藏/显示按钮的地方。我的应用程序中有一个 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 方法的一部分。再次感谢所有的帮助。看到这么多答案我很惊讶!谢谢。

4

5 回答 5

2

使财产可公开访问。

@property (nonatomic, retain) UIButton *myButton;

然后在 cellForRowAtIndexpath

ButtonCell *buttonCell =(ButtonCell *) [tableView dequeueReusableCellWithIdentifier:@"ButtonCell"];
于 2013-06-12T15:46:46.003 回答
1

可能是大写错误?

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

代替 :

[ButtonCell.myButton setHidden:NO]; // Trying to access class variable
于 2013-06-12T15:22:43.003 回答
1

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

于 2013-06-12T15:26:09.687 回答
1

在您的代码中

[ButtonCell.myButton setHidden:NO];

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

buttonCell = [tableView cellForRowAtIndexPath:indexPath];
buttonCell.myButton.hidden = NO;
于 2013-06-12T15:28:56.420 回答
1

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

于 2013-06-12T15:36:55.537 回答