【问题标题】:How to Navigate from one view to another view in ios?如何在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 或使用委托模式来完成。 (两者都很简单

标签: ios cocoa-touch uinavigationcontroller uitabbarcontroller


【解决方案1】:

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

步骤:

  1. 在第二个选项卡的viewController-viewDidLoad 方法中:
    • 添加通知观察者并为其设置目标选择器方法
  2. 在第一个标签的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

【讨论】:

【解决方案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,然后你想去第二个选项卡,然后在按钮点击动作中写下这段代码。
    猜你喜欢
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多