我有一个UITableViewCell
子类,其中每个表格单元格都包含UICollectionView
个UIcollectionViewCell
个。{/ p>
我需要,当点击任何collectionViewCell
时,新的viewController必须打开。
我已经覆盖了以下方法,
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
因为我在UITableViewCell子类中实现了整个collectionView所以我无法调用[self performSegueWithIdentifier:@"NewViewController" sender:self];
我在同一个类中尝试了prepareForSegue
,但它在didSelectItemAtIndexPath
方法之前加载了新的viewController。
答案 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
,因为UITableViewCell
是UIViewController
方法,所以从逻辑上讲,您需要调用此函数在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];
}
我认为这将解决您的麻烦。