我的阵列NSStrings
,一个UILabel
&一个UICollectionView
。
我的问题:
我想阵列的数量,以确定有多少UICollectionViewCell
的也有。
每个UICollectionViewCell
包含一个按钮。 一旦点击,我想这个按钮对应于数组中造成数据UICollectionViewCell
的号码将显示在标签中。
例如,如果用户点击在13 UICollectionViewCell
的按钮,然后在13 NSString
阵列中会成为UILabel
的文本。
我做了什么:
我做了我的自己的子类UICollectionViewCell
为我用所有的笔尖文件UICollectionViewCell
S,与连接按钮.h文件作为IBAction
。 我还进口MainViewController.h
,这是一个包含存储阵列属性的一个NSString
秒。
当我编辑的代码UICollectionViewCell
的行动,我无法访问数组属性。 按钮不工作- I置于的NSLog在IBAction
的方法,该方法不工作。
我已经经历了几十上的其他答案的搜查,但没有回答我的具体问题。 如果要求我可以用我的代码示例更新此。
我已经做了,我使用的所有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;
}
请尝试这样的..
在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];
}
}
当我在UICollectionViewCell的行动编辑代码,我不能访问数组属性。
那是因为你连接的按钮操作的“错误”的对象。 它需要被连接到MainViewController(或谁它是确实有访问阵列属性)。
你将有几个任务来执行:
所有这些任务应该很方便地属于一个对象。 我假设,这是MainViewController(因此我假设这MainViewController是集合视图的委托/数据源)。