我创建了一个 navigationController 应用程序,它在堆栈中有一个子类,基本上如下所示:
- 根视图控制器
- leaderboardViewController <----- 此 VC 中的 UITableView 设置为文件所有者
- UITableViewCell
- UICollectionView <-----这是我尝试推送新视图控制器的地方
- UITableViewCell
在 UITableViewCell.m 文件中的 collectionView didSelect 方法中:
- (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
发送通知时运行该方法:
- (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];
}];
}
然后在初始化collectionView的leadboardVC.m中:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(postInfo) name:@"PostCellInformation" object:nil];