我有一个使用 XIB 文件创建的自定义 UICollectionViewCell。如何让这个单元格在点击时将另一个控制器推入堆栈
Posted
技术标签:
【中文标题】我有一个使用 XIB 文件创建的自定义 UICollectionViewCell。如何让这个单元格在点击时将另一个控制器推入堆栈【英文标题】:I have a custom UICollectionViewCell that was created using an XIB file.How do I get this cell to push another controller onto the stack when tapped 【发布时间】:2014-07-03 23:22:14 【问题描述】:我无法在界面生成器中拖动和创建转场,因为这是一个 XIB 文件。基本上我有一个 UICollectionView 有两个布局。标准布局使用一个自定义单元格,而其他布局使用另一个自定义单元格。
第一个自定义单元格很容易连接,因为它不是 XIB 文件,所以我只需将其拖动并连接到我想要在点击它时推送到的详细视图。但是,第二个自定义单元格是 XIB 单元格,无法以这种方式连接。
这是我的集合视图 cellForRowAtIndexPath 方法:
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object
// NSLog(@"cellForItemAtIndexPath");
static NSString *CellIdentifier = @"Cell";
static NSString *CellIdentifier2 = @"Cell2";
VAGGarmentCell *cell;
if ([[_collectionView collectionViewLayout] isEqual: _flowLayout])
cell = [_collectionView dequeueReusableCellWithReuseIdentifier: CellIdentifier forIndexPath:indexPath];
else if ([[_collectionView collectionViewLayout] isEqual: _flowLayout2])
cell = [_collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier2 forIndexPath:indexPath];
// // Detect tap of image View
UITapGestureRecognizer *gestureRecogniser = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapGarmentCellTwoImage:)];
[gestureRecogniser setNumberOfTapsRequired:1];
[[cell imageView] addGestureRecognizer:gestureRecogniser];
[[cell imageView] setUserInteractionEnabled: YES];
[[cell activityIndicator] startAnimating];
PFFile *userImageFile = [object valueForKey:@"image"];
[[cell imageView] setFile: userImageFile];
[[cell imageView] loadInBackground];
[[cell activityIndicator] stopAnimating];
[[cell title] setText:[object valueForKey:@"title"]];
[[cell price] setText:[NSString stringWithFormat: @"£%@ GBP", [object valueForKey:@"price"]]];
// if database favourites status is equal to one then set highlighted to (yes)
UIButton *addFavouriteButton = [cell addFavouriteButton];
BOOL objectFavourited = [object[@"favourite"] boolValue]; // I set this when add fav button is tapped
[addFavouriteButton setSelected: objectFavourited];
[addFavouriteButton addTarget:self action:@selector(addFavouriteButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
return cell;
- (void)didTapGarmentCellTwoImage:(UITapGestureRecognizer *)sender
[self performSegueWithIdentifier:@"garmentDetailSegue" sender:self];
这种方式给我一个错误:
[UITapGestureRecognizer _layoutAttributes]: unrecognized selector sent to instance 0xc7f3290'
这看起来很乱。有一个更好的方法吗?拖动和连接到另一个单元格要容易得多。
【问题讨论】:
【参考方案1】:您是否尝试过使用 collectionView:didSelectItemAtIndexPath: 而不在您的单元格上添加 TapGesture。
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
if ([[_collectionView collectionViewLayout] isEqual: _flowLayout])
//do what you want with the other cell selection
else if ([[_collectionView collectionViewLayout] isEqual: _flowLayout2])
[self performSegueWithIdentifier:@"garmentDetailSegue" sender:self];
【讨论】:
以上是关于我有一个使用 XIB 文件创建的自定义 UICollectionViewCell。如何让这个单元格在点击时将另一个控制器推入堆栈的主要内容,如果未能解决你的问题,请参考以下文章