我的集合视图单元格中有一个按钮,当按下按钮时,它应该更改其背景图像并获取按下单元格按钮的单元格内容。
我这样做
在我的.h文件中
@interface MyCell : UICollectionViewCell
@property (nonatomic, strong) UIButton *button;
@end
@interface DetailInvoicing : UIViewController
<。>文件中的
@implementation MyCell
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame])
{
self.button = [UIButton buttonWithType:UIButtonTypeCustom];
self.button.frame = CGRectMake(175, 1, 50, 30);
self.button.backgroundColor = [UIColor clearColor];
[self.button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[self.button setBackgroundImage:[UIImage imageNamed:@"buy.png"]forState:UIControlStateNormal];
[self.contentView addSubview:self.button];
}
return self;
}
- (void)buttonClicked:(UIButton *)sender
{
NSLog(@"button clicked!");
self.button.backgroundColor = [UIColor lightGrayColor];
[self.button setTitle:@"Sold" forState:UIControlStateNormal];
[self.button setBackgroundImage:[UIImage imageNamed:nil]forState:UIControlStateNormal];
}
@end
在viewdidload方法中
[self CollectionLoad];
并且CollectionLoad方法是
// Use sqlite query to fetch data and save it in array, then
myCollection.delegate = self;
myCollection.dataSource = self;
[myCollection reloadData];
myCollection.backgroundColor=[UIColor clearColor];
[myCollection registerClass:[MyCell class] forCellWithReuseIdentifier:@"CellID"];
然后
use datasource and delegate methods
点击所需单元格按钮的按钮BG图像被更改。并且还有一些其他随机单元格按钮背景图像被更改...
这里有什么问题,第二件事是
如何在此按钮上获取单元格的内容....
答案 0 :(得分:4)
您的问题是重用和数据管理。
首先,您通过从池中将它们出列来重用单元。然后添加一个具有默认配置的新按钮。因此,每次重复使用单元格时,您都会添加一个新按钮(即使已经有一个按钮),您也不会给它任何特殊配置(部分数据管理问题)。
对于数据管理,仅更改按钮的状态是不够的 - 您还需要使用按钮选择所代表的新状态更新数据模型。然后,下次显示该状态时,您可以将其设置为正确的值。
您应采取的一般方法是继承UICollectionViewCell
,以便您可以添加按钮(仅一次)。单元子类应该是按钮的目标(而不是控制器)。单元子类还可以有一个@property
,它是与之关联的数据模型的一部分,以便在点击按钮时可以更新内容。并且,当设置属性时,单元格可以根据内容自行更新(设置适当的按钮配置)。或者,单元可以使用适当的信息回调到控制器(并且控制器可以在数据源方法中配置按钮)。