使用上的UICollectionViewCell一个按钮,从数组中显示数据(Use a button

2019-09-02 08:42发布

我的阵列NSStrings ,一个UILabel &一个UICollectionView

我的问题:

我想阵列的数量,以确定有多少UICollectionViewCell的也有。

每个UICollectionViewCell包含一个按钮。 一旦点击,我想这个按钮对应于数组中造成数据UICollectionViewCell的号码将显示在标签中。

例如,如果用户点击在13 UICollectionViewCell的按钮,然后在13 NSString阵列中会成为UILabel的文本。

我做了什么:

我做了我的自己的子类UICollectionViewCell为我用所有的笔尖文件UICollectionViewCell S,与连接按钮.h文件作为IBAction 。 我还进口MainViewController.h ,这是一个包含存储阵列属性的一个NSString秒。

当我编辑的代码UICollectionViewCell的行动,我无法访问数组属性。 按钮不工作- I置于的NSLog在IBAction的方法,该方法不工作。

我已经经历了几十上的其他答案的搜查,但没有回答我的具体问题。 如果要求我可以用我的代码示例更新此。

Answer 1:

我已经做了,我使用的所有UICollectionViewCells的笔尖文件我UICollectionViewCell的自己的子类,并连接按钮.h文件作为IBAction为。

如果您的IBAction为连接到collectionViewCell的子类,你需要创建一个委托,以使在现有的viewController触摸事件在您展示的数据。

一个简单的调整是添加按钮collectionViewCell,连接它的IBOutlet中的细胞。 但不是IBAction为。 在cellForRowAtIndexPath:在含有的CollectionView那个的viewController添加一个事件处理程序为按钮。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    //Dequeue your cell

    [cell.button addTarget:self 
                    action:@selector(collectionViewCellButtonPressed:)
          forControlEvents:UIControlEventTouchUpInside];

    return cell;

}


- (IBAction)collectionViewCellButtonPressed:(UIButton *)button{

    //Acccess the cell
    UICollectionViewCell *cell = button.superView.superView;

    NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];

    NSString *title = self.strings[indexPath.row];

    self.someLabel.text = title;

}


Answer 2:

请尝试这样的..

在YourCollectionViewCell.h

创建一个IBOutlet不IBAction为所谓的按钮,为您添加到厦门国际银行的UIButton的。 记住,你不应该出口连接到电池对象在厦门国际银行文件的所有者。

MainViewController.m

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{

  cell.button.tag = indexPath.row;
  [cell.button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
return cell;
} 

-(void)buttonPressed:(UIButton*)sender
{
  NSLog(@"%d : %@",sender.tag,[array objectAtIndex:sender.tag]);
  self.textLabel.text = [array objectAtIndex:sender.tag];
 }

编辑-处理多个节

 -(void)buttonPressed:(UIButton*)sender
 {
  NSIndexPath  *indexPath = [self.collectionView indexPathForCell: (UICollectionViewCell *)sender.superview.superview];

NSLog(@"Section : %d  Row: %d",indexPath.section,indexPath.row);

if (0 == indexPath.section) {
    self.textLabel.text = [firstArray objectAtIndex:indexPath.row];
}
else if(1 == indexPath.section)
{
     self.textLabel.text = [secondArray objectAtIndex:indexPath.row];
}

}


Answer 3:

当我在UICollectionViewCell的行动编辑代码,我不能访问数组属性。

那是因为你连接的按钮操作的“错误”的对象。 它需要被连接到MainViewController(或谁它是确实有访问阵列属性)。

你将有几个任务来执行:

  • 接收按钮操作信息。

  • 访问阵列( 型号为数据)。

  • 抛出一个开关说法,其中电池现在应该有它的标签显示。

  • 告诉收集视图reloadData ,从而刷新细胞。

所有这些任务应该很方便地属于一个对象。 我假设,这是MainViewController(因此我假设这MainViewController是集合视图的委托/数据源)。



文章来源: Use a button on a UICollectionViewCell to display data from an array