从UIView推送UIViewController

时间:2012-04-01 10:10:43

标签: iphone ios uiview uiviewcontroller uinavigationcontroller

我需要将UIView推送到我的UINavigation controller。我是通过

来做的
[self.view addSubview:showContactFlow];

在UIView上单击按钮,我需要在UIView上推送另一个UIViewController。从UIView我无法访问self.navigationcontroller我该怎么做?

编辑:

我已将UIView设置为我正在推送的新UIViewController的视图,前面提到的UIViewController。现在我想知道,如何处理UIView内的UIViewController按钮事件,其中的视图已设置。

4 个答案:

答案 0 :(得分:1)

UINavigationController ivar添加到UIView并将其分配给主视图控制器。然后,您应该可以从UIView

访问它

编辑:

您的UIView子类:

// CustomView.h
@interface CustomView: UIView {
    // ...
    // your variables
    // ...
    UINavigationController *navController;
}

@property (nonatomic, assign) UINavigationController *navController; // assign, because this class is not the owner of the controller

// custom methods

@end

// CustomView.m
@implementation Customview

// synthesize other properties
@synthesize navController;

// implementation of custom methods

// don't release the navigation controller in the dealloc method, your class doesn't own it

@end

然后在[self.view addSubview:showContactFlow];行之前添加[showContactFlow setNavController:[self navigationController]];,然后您就可以从UIView访问层次结构的导航控制器,并使用它来推送其他UIViewController s

答案 1 :(得分:0)

您应该尝试使用MVC方法。因此,您的控制器可以访问所有这些内容并且可以继续推送和弹出视图,因此视图不需要对控制器了解太多。

否则,在这种情况下,您可以使用委派快速解决问题。所以:

showContactFlow.delegate = self;
[self.view addSubview:showContactFlow];

稍后在UIView中,您可以说:

[self.delegate addSubview:self];

这会起作用,但它不太可能是你应该使用的最佳方法。

答案 2 :(得分:0)

单击按钮,可以显示视图控制器,如

    -(void)buttonFunction{
           ThirdVC *third= [[ThirdVC alloc]initWithNibNme];......

           [self presentViewController:third animated:NO];


    }

使用Core动画,您可以在ThirdVC的viewWillAppear:方法中编写NavigationController的pushviewController,就像动画一样。

答案 3 :(得分:0)

你在哪里添加UIButton是在showContactFlow视图中还是在ViewController的视图中?

关于modalViewControllers问题,正确的方法是

    [self presentModalViewController:viewController animated:YES];

向上的标准动画