如何在选择UICollectionViewCell时使用Segue

时间:2016-06-29 12:36:42

标签: ios objective-c uitableview segue uicollectionviewcell

我有一个UITableViewCell子类,其中每个表格单元格都包含UICollectionViewUIcollectionViewCell个。{/ p>

我需要,当点击任何collectionViewCell时,新的viewController必须打开。

我已经覆盖了以下方法,

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

因为我在UITableViewCell子类中实现了整个collectionView所以我无法调用[self performSegueWithIdentifier:@"NewViewController" sender:self];

我在同一个类中尝试了prepareForSegue,但它在didSelectItemAtIndexPath方法之前加载了新的viewController。

3 个答案:

答案 0 :(得分:0)

您可以使用此代码

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
    YourViewController *newView = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"NewViewController"];
    [self.navigationController pushViewController:newView animated:YES];
}

答案 1 :(得分:0)

您无法从UITableViewCell内部performSegueWithIdentifier致电UIViewController,因为UITableViewCellUIViewController方法,所以从逻辑上讲,您需要调用此函数在UIViewController中。

你需要设置协议并从- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath [self.delegate cellDidSelect:indexPath]; } UIViewController内部调用方法,就像这样

UITableView

-(void)cellDidSelect:(NSIndexPath*)indexPath{ [self performSegueWithIdentifier:@"NewViewController" sender:self]; } - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath [self.parentContoller performSegueWithIdentifier:@"NewViewController" sender:self.parentContoller]; } 只处理

{{1}}

或者,在UITableViewCell中使用UIViewController引用作为属性,并直接调用

{{1}}

希望它对你有所帮助。欢呼声。

答案 2 :(得分:0)

在您的UITableViewCell子类

@protocol MyUITableViewCellDelegate <NSObject>
-(void)selectedCell;
@end


@interface MyUITableViewCell : UITableViewCell
 ....
 ....
@property(nonatomic, weak) id<MyUITableViewCellDelegate>delegate;
 ..
 ..
@end

在视图控制器中,为每个UITableViewCell设置

cell.delegate = self;

对于SomeViewController.m文件

@interface SomeViewController : UIViewController<MyUITableViewCellDelegate>{
.....
}

@end

@implementation SomeViewController
.....
...... 
-(void)selectedCell{
    [self performSegueWithIdentifier:@"NewViewController" sender:self];// The segue with identifier 'NewViewController' should be from SomeViewController to the desired view controller.

}
.....
@end

并像这样调用selectedCell

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
   [self.delegate selectedCell];
}

我认为这将解决您的麻烦。