如何在 uicollectionview 单元格中使用 uibutton 操作并获取单元格的内容
Posted
技术标签:
【中文标题】如何在 uicollectionview 单元格中使用 uibutton 操作并获取单元格的内容【英文标题】:how to use uibutton action in uicollectionview cell and get contents of cell 【发布时间】:2014-03-29 11:03:30 【问题描述】:经过大量搜索无法找出我的问题。我是ios开发的新手,所以如果我错了,请不要介意……。 :P :)
我的集合视图单元格中有一个按钮,当按下按钮时,它应该更改其背景图像并获取按下单元格按钮的单元格的内容。
我就是这样做的
在我的 .h 文件中
@interface MyCell : UICollectionViewCell
@property (nonatomic, strong) UIButton *button;
@end
@interface DetailInvoicing : UIViewController
在 .m 文件中
@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 图像的按钮时更改。并且还有一些其他随机单元格的按钮背景图片被改变了......
这里有什么问题,第二件事是
如何在此按钮点击上获取单元格的内容......
【问题讨论】:
创建按钮,如***.com/questions/22678841/… @iPatel 请检查我编辑的问题 【参考方案1】:您的问题是重用和数据管理。
首先,您通过将单元格从池中出列来重用单元格。然后,您添加一个具有默认配置的新按钮。因此,每次重复使用单元格时,您都将添加一个新按钮(即使已经存在一个),并且您不会对其进行任何特殊配置(数据管理问题的一部分)。
对于数据管理,仅更改按钮的状态是不够的 - 您还需要使用按钮选择所代表的新状态来更新数据模型。然后,下次显示该状态时,您可以将其设置为正确的值。
您应该采取的一般方法是将UICollectionViewCell
子类化,以便您可以添加按钮(仅一次)。单元子类应该是按钮的目标(而不是控制器)。单元子类也可以有一个@property
,它是与之关联的数据模型的一部分,以便在点击按钮时它可以更新内容。并且,当设置属性时,单元格可以根据内容更新自身(设置适当的按钮配置)。或者,单元格可以使用适当的信息回调到控制器(控制器可以在数据源方法中配置按钮)。
【讨论】:
请您说的更清楚些……我不确定我是否理解您所说的……。 :( 具体有什么不清楚的?您需要存储按钮状态并在需要单元格时更新按钮... 按钮状态应该如何以及在哪里存储? 有趣的问题——你的应用当前应该存储一些数据/状态?您还没有说应用程序的作用/按钮的用途/点击它的含义...... 我在单元格中有一些产品图片。点击按钮时,按钮背景图像应该会改变,并通过获取单元格的索引路径将此产品添加到购物车或类似的东西......以上是关于如何在 uicollectionview 单元格中使用 uibutton 操作并获取单元格的内容的主要内容,如果未能解决你的问题,请参考以下文章
如何从选定的 UICollectionView 单元格中获取数据?
如何使用 Alamofire 在 UICollectionView 单元格中使用标签显示图像?
如何在 uicollectionview 单元格中使用 uibutton 操作并获取单元格的内容
如何在 UICollectionView 单元格中获取 UIImageView 的帧大小