0

我创建了一个 navigationController 应用程序,它在堆栈中有一个子类,基本上如下所示:

  • 根视图控制器
  • leaderboardViewController <----- 此 VC 中的 UITableView 设置为文件所有者
    • UITableViewCell
      • UICollectionView <-----这是我尝试推送新视图控制器的地方

在 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并将其放入NSNotificationCenterVC 以在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];
4

1 回答 1

1

这条线...

leaderboardViewController *leaderboardView = [[leaderboardViewController alloc] init];

...创建. _ leaderboardViewController由于它是新的,它不是控制显示的当前视图控制器层次结构的一部分。这意味着它推送的任何东西也不是当前显示层次结构的一部分。

(因此,我怀疑您navigationControllernil也在其中postInfo,但我想记录该值以确定。)

于 2012-12-05T13:17:53.440 回答