iOS:未触发Storyboard CollectionView segue [英] iOS: Storyboard CollectionView segue not being triggered
问题描述
我在导航控制器中嵌入了一个UICollectionView控制器.collectionView会列出项目,并且每个单元格都应该连接到ProjectDetail屏幕.
I have a UICollectionView controller embedded inside a navigation controller. The collectionView lists projects and each cell is supposed to segue to a ProjectDetail screen.
我根本无法触发选择.如果我只是在导航栏上单击一个按钮,然后将一个按钮连接到该细节,则它会起作用.但是不会从我的CollectionView单元中触发.
I simply cannot get the segue to trigger. If I simply drop a button on the nav bar and hook up a segue to the detail, it works. But triggering from my CollectionView cell doesn't.
这是情节提要的样子: http://cl.ly/RfcM 我确实有一个秘密从CollectionViewCell连接到ProjectDetailViewController
Here is what the storyboard looks like: http://cl.ly/RfcM I do have a segue hooked up from the CollectionViewCell to the ProjectDetailViewController
这是我的ProjectDetailViewController内部的相关代码:
Here's the relevant code inside my ProjectDetailViewController:
@interface ProjectCollectionViewController () {
NSArray *feedPhotos;
Projects *projects;
}
@end
@implementation ProjectCollectionViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.collectionView registerClass:[FeedViewCell class] forCellWithReuseIdentifier:@"cell"];
[self loadData];
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"selected %d", indexPath.row);
Project *project = [projects getProject:indexPath.row];
NSLog(@"project = %@", project);
}
- (void)loadData {
[self.projectLoader loadFeed:self.username
onSuccess:^(Projects *loadedProjects) {
NSLog(@"view did load on success : projects %@", loadedProjects);
projects = loadedProjects;
[self.collectionView reloadData];
}
onFailure:^(NSError *error) {
[self handleConnectionError:error];
}];
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return projects.count;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"cell";
FeedViewCell *cell = (FeedViewCell *) [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
cell.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:1.0];
UIImageView *cellImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
Project *project = [projects getProject:indexPath.row];
NSString *imageUrl = [project coverPhotoUrl:200 forHeight:200];
NSLog(@"imageurl =>%@", imageUrl);
if (imageUrl) {
[cellImageView setImageWithURL:[NSURL URLWithString:imageUrl]];
}
[cell addSubview:cellImageView];
cell.imageView = cellImageView;
return cell;
}
我猜测问题出在将单元格连接到CollectionView的方式上.
I'm guessing the problem is somewhere in how I'm hooking up the Cells to the CollectionView.
任何帮助将不胜感激!
推荐答案
您不能直接从情节提要中的单元格创建segue,因为collectionview是通过数据源动态填充的.您应该使用 performSegueWithIdentifier:sender:
.像这样:
You cannot create segues directly from cells in a storyboard because the collectionview is populated dynamically through the data source. You should use the collectionView:didSelectItemAtIndexPath:
and perform the segue programatically using performSegueWithIdentifier:sender:
. Something like this:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
[self performSegueWithIdentifier:@"MySegueIdentifier" sender:self];
}
其中 MySegueIdentifier
是情节提要中定义的segue的标识符.
where MySegueIdentifier
is the identifier of the segue defined in storyboard.
这篇关于iOS:未触发Storyboard CollectionView segue的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!