如何在 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 的帧大小

如何删除 UICollectionView 单元格中的单个对象?

每个 UICollectionView 单元格中的 UITableView