从外部类调用pushViewController?

时间:2014-05-28 05:30:59

标签: cocoa-touch ios7

我是IOS7的新手,我正在努力拨打pushViewController

首先我有UINavigationController作为根视图控制器,我有UICollectionViewController

在此UICollectionViewController我还注册了UICollectionViewCell

[self.collectionView registerClass:[MYProductCell class]
   forCellWithReuseIdentifier:@"product"];

我正在根据单元格中的用户操作尝试pushViewController宽度详细信息视图。

使用

我没有任何问题
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

    NSDictionary *product = self.products[indexPath.row];

    TXDetailProductController *detailView = [[TXDetailProductController alloc] init];
     detailView.product = product;

    [self.navigationController pushViewController:detailView animated:YES];

}  

但我想根据用户操作从UICollectionViewCell类调用pushViewController:detailView。

有人可以给我指示吗? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

您可以发送消息。

在viewDidLoad中,您可以设置一个消息监听器:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushDetailView:) name:@"pushDetailView" object:nil];

然后添加一个方法:

    -(void) pushDetailView:(id)sender
    {
        // do your pushViewController
    }

然后在UICollectionViewCell当您需要推送视图时执行:

    NSNotification* notification = [NSNotification notificationWithName:@"pushDetailView" object:self];
    [[NSNotificationCenter defaultCenter] postNotification:notification];

侦听器应该收到该通知并调用将推送视图的pushDetailView。您可能还需要进行一些错误检查。

您可能需要将信息传递给方法,以便了解要推送的内容。您可以将信息放在对象中并与消息一起发送。类似的东西:

    NSNumber *indexPathRow = [NSNumber numberWithInt: indexPath.row];
    NSNotification* notification = [NSNotification notificationWithName:@"pushDetailView" indexPathRow object:indexPathRow];
    [[NSNotificationCenter defaultCenter] postNotification:notification];

然后在接收器类中,您将该信息从通知的对象中拉出来:

    -(void) pushDetailView:(NSNotification*)note
    {
        NSNumber indexPathRow = [note object];
        NSDictionary *product = self.products[[indexPathRow intValue]];
        // and on with your pushViewController code
    }

再次在那里进行错误检查。