在我的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方法的一部分。再次感谢所有的帮助。看到这么多答案,我感到很惊讶!感谢。
答案 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
的实例,然后您可以取消隐藏它,这假设您要修改cellForRowAtIndexPsth
或willDisplayCell
之外的单元格对象。
答案 3 :(得分:1)
在您的代码中
[ButtonCell.myButton setHidden:NO];
您正在尝试使用对象类名而不是对象名。您需要获取包含按钮的单元格
buttonCell = [tableView cellForRowAtIndexPath:indexPath];
buttonCell.myButton.hidden = NO;
答案 4 :(得分:1)
您是否在ButtonCell的头文件中拥有该属性的公共访问器?类似@property (nonatomic, retain) UIButton *myButton;
的东西
这就是我通常看到这样的编译器警告的方式。