如何在ios中从一个视图导航到另一个视图?

Posted

技术标签:

【中文标题】如何在ios中从一个视图导航到另一个视图?【英文标题】:How to Navigate from one view to another view in ios? 【发布时间】:2013-12-25 06:51:16 【问题描述】:

我有带有 4 个选项的标签栏。 在第一个选项卡中,我有一个按钮。当我单击此按钮时,我必须在第二个标签栏中从一个视图移动到另一个视图。

我目前使用的代码是(shipVC 是第二个标签的viewController):

[shipVC.navigationController pushViewController:cartVC animated:NO];

所以基本上,当按下第一个标签viewController 中的按钮时,我想从第二个标签viewController 中的“X”视图移动到“Y”视图

【问题讨论】:

[self.navigationController pushViewController:cartVC animated:NO ]; 我不在同一个视图中导航 提供更多信息,问题含糊不清(现在 按下第一个标签栏中的按钮时,我必须从第二个标签栏中的“X”视图移动到“Y”视图 @Madhu :所以一个viewController 中的操作需要在另一个(不相关?viewController 中体现变化?这可以通过NSNotificationCenter 或使用委托模式来完成。 (两者都很简单 【参考方案1】:

一种快速的方法是使用NSNotificationCenter 在第一个选项卡的viewController 中的按钮被按下时发布通知。

步骤:

    在第二个选项卡的viewController-viewDidLoad 方法中: 添加通知观察者并为其设置目标选择器方法 在第一个标签的viewController的按钮方法中: 发布通知

示例:

您的第二个标签的viewController 类:

-(void)viewDidLoad 
    [super viewDidLoad];

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


-(void)doTheNavigation 
    [self.navigationController pushViewController:cartVC animated:NO];
    //WARNING: don't just push, put a check  or else repeated click on the
    //button in the 1st tab will push cartVC again and again.
    //This will not only warrant a crash but look very ugly


第一个标签的viewController 类中的按钮方法:

-(IBAction)someBtnClick:(UIButton *)sender 
    //...
    //you can use this to post a notification from anywhere now
    [[NSNotificationCenter defaultCenter] postNotificationName:@"AnyNameYouWantForNotification" 
                                                        object:nil];
    //...


所以...

单击第一个选项卡中的按钮时,按钮操作(我命名为 someBtnClick)将发布一个名为 AnyNameYouWantForNotification 的通知 第二个选项卡(应该已经加载并准备好了)将监听名称为 AnyNameYouWantForNotification 的通知。 收到此通知后,它将执行链接选择器方法(我命名为doTheNavigation

【讨论】:

@Madhu:不客气。通知既简单又足智多谋。苹果文档也很不错:link: NSNotificationCenter Apple Doc【参考方案2】:

检查我的答案

-(void)settabbar

        UIViewController *viewController1 = [[[viewController1 alloc] initWithNibName:@"viewController1" bundle:nil] autorelease];
        UIViewController *viewController2 = [[[viewController2 alloc] initWithNibName:@"viewController2" bundle:nil] autorelease];
        UIViewController *viewController3 = [[[viewController3 alloc] initWithNibName:@"viewController3" bundle:nil] autorelease];


        navControl1=[[UINavigationController alloc]initWithRootViewController:viewController1];
        navControl2=[[UINavigationController alloc]initWithRootViewController:viewController2];
        navControl3=[[UINavigationController alloc]initWithRootViewController:viewController3];

        navControl1.navigationBar.tintColor=[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
        navControl2.navigationBar.tintColor=[UIColor blackColor];
        navControl3.navigationBar.tintColor=[UIColor blackColor];

        self.tabBarController = [[[UITabBarController alloc] init] autorelease];
        self.tabBarController.delegate=self;
        self.tabBarController.viewControllers = [NSArray arrayWithObjects:navControl1,navControl2,navControl3, nil ];

        [[[[self.tabBarController tabBar] items] objectAtIndex:2] setFinishedSelectedImage:[UIImage imageNamed:@""] withFinishedUnselectedImage:[UIImage imageNamed:@""]];
        [[[[self.tabBarController tabBar] items] objectAtIndex:0] setTitle:@"view1"];
        [[[[self.tabBarController tabBar] items] objectAtIndex:0] setImage:[UIImage imageNamed:@"tab2.png"]];
        [[[[self.tabBarController tabBar] items] objectAtIndex:1] setTitle:@"view2"];
        [[[[self.tabBarController tabBar] items] objectAtIndex:1] setImage:[UIImage imageNamed:@"tab11.png"]];
        [[[[self.tabBarController tabBar] items] objectAtIndex:2] setTitle:@"ciew3"];
        [[[[self.tabBarController tabBar] items] objectAtIndex:2] setImage:[UIImage imageNamed:@"tab5.png"]];
        [[[[self.tabBarController tabBar] items] objectAtIndex:3] setTitle:@"Maintain Customer"];
        [[[[self.tabBarController tabBar] items] objectAtIndex:3] setImage:[UIImage imageNamed:@"tab4.png"]];

        [self.tabBarController.tabBar setSelectionIndicatorImage:[UIImage imageNamed:@"trans.png"]];

        UIImage* tabBarBackground = [UIImage imageNamed:@""];
        [[UITabBar appearance] setBackgroundImage:tabBarBackground];
        [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"trans.png"]];
    

    -(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController*)viewController

        NSLog(@"select : %d",tabBarController.tabBar.selectedItem.tag);

        if(self.tabBarController.tabBar.selectedItem.tag==0)
            [[self.tabBarController.viewControllers objectAtIndex:0] popViewControllerAnimated:YES];
        else if(self.tabBarController.tabBar.selectedItem.tag==1)
            [[self.tabBarController.viewControllers objectAtIndex:1] popViewControllerAnimated:YES];
        else if(self.tabBarController.tabBar.selectedItem.tag==2)
            [[self.tabBarController.viewControllers objectAtIndex:2] popViewControllerAnimated:YES];
        else 
            [(UINavigationController*) viewController popToRootViewControllerAnimated:YES];
        

        return YES;

    

【讨论】:

【参考方案3】:

您还需要在您的 appdelegate 中使用 Naigationcontroller 进行应用

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;


 HomeViewController *homeView = [[HomeViewController alloc]        initWithNibName:@"HomeViewController" bundle:[NSBundle mainBundle]];

[self.navigationController pushViewController:homeView animated:YES];
UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:homeView];

self.window.rootViewController = navController;
[self.window makeKeyAndVisible];

之后,您的导航栏将出现在您的第一个视图控制器中,然后您就可以导航了。

【讨论】:

我不在同一个视图中导航 如果你想导航其他选项卡,你需要使用它是不可能的:[tabController setSelectedIndex:1]; 当我使用这个方法时 [tabController setSelectedIndex:1];默认情况下,它显示我们放置在堆栈中的最后一个视图。但我希望加载我自己的屏幕 当你点击bottun,然后你想去第二个选项卡,然后在按钮点击动作中写下这段代码。

以上是关于如何在ios中从一个视图导航到另一个视图?的主要内容,如果未能解决你的问题,请参考以下文章

在 IOS 中从视图导航到另一个视图时的默认时间是多少

如何在我的 Xcode Swift 项目的不同导航堆栈中从一个视图控制器屏幕切换到另一个?

如何在 xamarin ios 中从一个视图控制器导航到第二个视图控制器?

如何导航到另一个导航控制器iOS

如何在情节提要中从一个视图转到另一个视图

如何在单击按钮时从一个视图控制器导航到另一个视图控制器?