从内部视图控制器推动视图控制器

时间:2012-01-16 16:53:03

标签: iphone ios uikit

this question中所述,我有一个视图控制器,在某些可能不存在数据的情况下需要用不同的布局替换自己。这似乎有效:

if ([analysis length] == 0) {
    hasReview = NO;
    UnreviewedSPP* unreviewedSPPView = [[UnreviewedSPP alloc] init];
    unreviewedSPPView.ProductName = self.productName;
    unreviewedSPPView.SdcId = self.sdcId;
    unreviewedSPPView.Delegate = self;
    NSArray* newViews = [[NSBundle mainBundle] loadNibNamed:@"UnreviewedSPP" owner:unreviewedSPPView options:nil];
    self.view = [newViews objectAtIndex:0];
    return;
}

但是,我似乎无法在替换视图中推送新的视图控制器:

    [priceButton handleControlEvent:UIControlEventTouchUpInside withBlock:^{
        WebViewController* wv = [[[WebViewController alloc] initWithNibName:@"WebViewController" bundle:nil] autorelease];
        wv.url = offerURL;
        [Delegate performSelector:@selector(pushViewControllerFromSubview:) withObject:wv];
    }];

priceButton是一个自定义按钮对象,可以将块作为目标操作执行。

我尝试了多种方法:将外部视图控制器作为委托传递,并将外部视图控制器的导航控制器作为内部视图控制器上的属性传递。

似乎没什么用。有更好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

问题:

1)当你调用pushViewControllerFromSubview时,wv是否被保留?我注意到你在这里有一个autorelease交易。检查pushViewControllerFromSubview中的wv视图。

2)替换视图的另一种方法是使用'[self.view addSubView:myView];'和[myView removeFromSuperView];'...这可能比推动视图控制器更好。

干杯

答案 1 :(得分:0)

根本原因是我的“外部视图”实际上是一个子视图,所以我无法直接访问其导航控制器。我忘记了这一点。