我已经创建了一个navigationController应用程序,它在堆栈中有一个子类,它基本上是这样的:
在collectionView内的didSelect方法中 UITableViewCell.m文件:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
userCell *user = (userCell *)[self.collectionView cellForItemAtIndexPath:indexPath];
imageTag = ((UICollectionView *)user).tag;
leaderboardViewController *leaderboardView = [[leaderboardViewController alloc] init];
[imageManager getInsightWithCompletionBlock:^(UIImage *image){
[leaderboardView postInfo];
}];
}
然后在leaderBoardViewController.m中是postInfo方法:
-(void)postInfo
{
NSLog(@"posted!");
largeInsight *detailedInsight = [[largeInsight alloc] initWithNibName:@"largeInsight" bundle:[NSBundle mainBundle]];
[[self navigationController] pushViewController:detailedInsight animated:YES];
}
NSLog出现在调试区域中,因此postInfo函数正在运行,但它不会推送新的viewController。我猜这是我错过的东西,或者我正在做的事我不应该...我不认为它是因为UICollectionView子类,因为我指的是leaderboardViewController。我只是不知道为什么它没有运行那个navigationController的代码。有没有人遇到同样的问题?谢谢!
更新
在一些帮助下,我删除了leaderboardViewController
的新实例变量并放入NSNotificationCenter
,指向VC,以便在发送通知时运行postInfo
方法:< / p>
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
userCell *user = (userCell *)[self.collectionView cellForItemAtIndexPath:indexPath];
imageTag = ((UICollectionView *)user).tag;
[imageManager getInsightWithCompletionBlock:^(UIImage *image){[[NSNotificationCenter defaultCenter] postNotificationName:@"PostCellInformation" object:self];
}];
}
然后在leadboardVC.m中初始化collectionView:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(postInfo) name:@"PostCellInformation" object:nil];
答案 0 :(得分:1)
这一行...
leaderboardViewController *leaderboardView = [[leaderboardViewController alloc] init];
...创建leaderboardViewController
的新实例。由于它是新的,它不是控制显示的当前视图控制器层次结构的一部分。这意味着它推送的任何内容也不是当前显示层次结构的一部分。
(因此,我怀疑navigationController
中的nil
postInfo
也是{{1}},但我想记录该值以确定。)