从UIView ios推送视图控制器

时间:2012-01-24 05:03:37

标签: ios uiview uiviewcontroller uinavigationcontroller

我有一个基于导航的应用程序。点击第一个屏幕导航栏上的按钮,我可以按如下方式推送另一个视图控制器:

 -(void) buttonClicked:(id)sender
{

    UIViewController*  mv = [[SecondViewController alloc] init];

    [[self navigationController] pushViewController:mv animated:YES];  

}

现在我有一个UIView(单独的.h和.m文件)作为第一个屏幕的一部分。单击UIView中的按钮,我想推送SecondViewController。 我尝试过以下方法:

 UIViewController*  mv = [[SecondViewController alloc] init];
 UIViewController * home=[[FirstViewController alloc]init];
 [[home navigationController] pushViewController:mv animated:YES];

它不起作用!!请帮助

6 个答案:

答案 0 :(得分:0)

UIViewController*  mv = [[SecondViewController alloc] init];
UIViewController * home=[[FirstViewController alloc]init];
[[home navigationController] pushViewController:mv animated:YES];

这里的问题是home不是导航堆栈的一部分,所以[home navigationController]肯定是零。我不太清楚你在这里要做什么,但只是创建一个视图控制器并不意味着它实际上是视图控制器图形的一部分。

答案 1 :(得分:0)

为什么会有效?随机创建视图甚至不可见的视图控制器不是解决方案。您可以在视图中保留对VC的引用,如下所示:

@imlementation ViewController

- (id) init
{
    // ...
    aView = [[CustomView alloc] init];
    aView.viewController = self;
    // ...
}

@end

@interface CustomView

@property (assign) ViewController *viewController;

@end

或者您可以在运行时搜索响应者链:

UIResponder *next = [view nextResponder];
while (next)
{
    if ([next isKindOfClass:[ViewController class]])
    {
        break;
    }
    next = [next nextResponder];
}

现在“next”将包含视图控制器(如果无法找到则为nil。)

答案 2 :(得分:0)

我现在看到你的问题!你需要#import你的FirstViewController,然后@class它。然后按你的推动。

所以:

//.h 
#import "FirstViewContoller.h"

@class FirstViewController;

@interface...

//.m

-(void)return {
FirstViewController *firstview = [[FirstViewController alloc]init(withnibname:)];
[firstView.navigationController pushViewController: firstView.navigationController.topViewController animated: TRUE];
}

答案 3 :(得分:0)

尝试使用相同的navigationController推送视图,这将保持相同的ViewControllers堆栈。

UIViewController*  mv = [[SecondViewController alloc] init];
[[self navigationController] pushViewController:mv animated:YES]; 

[mv release];

答案 4 :(得分:0)

如果我没有错,你的UIView虽然在单独的文件中,但仍然会从UIViewController类添加到屏幕上。

只需将UIView的通知发布到您可以访问导航控制器的FirstViewController类。然后从那里推送SecondViewController。

答案 5 :(得分:0)

你可以用它。它对我很有用: -

首先在UIView类中创建AppDelegate的对象并初始化它。然后在Appdelegate.h中创建Navigationcontroller对象: -

@property(strong,nonatomic) UINavigationController *navControl;

在你的UIView类中,实现你要推送的代码: -

ViewController *objview = [[ViewController alloc]init]; [appDelegate.navControl pushViewController:objview animated:YES];