【问题标题】:How to dismiss view when Tab bar item is pressed?按下标签栏项目时如何关闭视图?
【发布时间】:2013-06-05 05:40:35
【问题描述】:

我有一个视图,顶部有一个导航栏,中间有 4 个菜单按钮,底部有一个标签栏导航。

当只使用标签栏项目时,一切正常,但是当我通过按钮加载其中一个视图时,当标签栏项目被按下时,视图仍然存在。

我是 ios 新手,所以我可能无法很好地解释它。我附上几张图片来说明我的意思。

我假设我必须解决的问题是拦截在标签栏上按下的 Home 按钮并告诉它关闭先前加载的视图。我可以出去吃午饭。

请告诉我如何让标签栏上的主页按钮加载初始视图,即使其中一个按钮被按下来加载另一个视图。

这是我的故事板的样子。我使用了 Editor->Embed TabbarController。

** 更新:仍在努力解决这个问题。我试图根据stackoverflow上的一些Q/A通过应用程序委托设置标签栏控制器委托,但它似乎没有任何区别。如果我想拥有一个带有各个部分的按钮的主屏幕,并且这些部分有导航和标签栏控制器,我应该采取另一种方法?

【问题讨论】:

  • 请查看您的代码按下标签栏项目事件
  • 您能否向我们展示您加载新视图(视频/表演者/游戏/设置)的代码?
  • 我将控件从Video按钮拖到VideoList View。除了将所选标签更改为视频标签的 buttonPressed 操作之外,我没有编写任何其他代码。

标签: ios objective-c uiview uitabbarcontroller


【解决方案1】:

需要在tab bar item tapped事件中添加一行代码

这里在标签栏项的导航控制器上使用popToRootViewController方法。

你可以像这样从标签栏找到导航控制器对象

UINavigationController *navcon = (UINavigationController*)myTabBarController.selectedViewController;


the use popToRootViewController

[navcon popToRootViewControllerAnimated:NO];

您可以将此委托用于此代码

-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

【讨论】:

  • 它没有用,但我显然没有正确实施您的建议。哈哈
  • 这是我添加到 .m 文件中的内容: - (void)tabBarController:(UITabBarController )tabBarController didSelectViewController:(UIViewController *)viewController { UINavigationController *navcon = (UINavigationController) tabBarController.selectedViewController; [navcon popToRootViewControllerAnimated:NO]; }
  • 代码看起来不错。你能调试一下你的代表正在打电话吗?如果没有,请检查 xib 中的委托出口。
  • 还检查 eric 答案,可能是您使用的是 UITabBar 而不是 UITabBarController。所以使用他指出的代表。
  • 不,它看起来不像被调用。我只是尝试了一个 NSLog 和一个断点,但都没有被绊倒。标签栏和导航是通过故事板嵌入的。这有什么不同吗?
【解决方案2】:

试试这个

[self.tabBarController setSelectedIndex:1];

【讨论】:

    【解决方案3】:

    我可以看到您正在使用 UINavigationController 转到下一个视图(视频)而不是使用 UITabBarController。

    你应该使用 TABBarController 方法。

    【讨论】:

    • 我控制从视频按钮拖到视频列表视图。我猜这会自动使用导航控制器。如何通过仍然保持工作标签栏使按钮显示另一个视图?
    • 按钮按下时如何使用Tabbarcontroller方法?
    • [self.tabBarController setSelectedIndex:1];应该有帮助。其中 1 是 tabindex .. 从 0 开始
    【解决方案4】:

    如果在 push 时显示视频页面。然后在返回按钮的选择器操作中

    添加

    [self.navigationController popViewControllerAnimated:YES];
    

    【讨论】:

      【解决方案5】:

      我设法解决了这个问题,但我不得不重新开始。我使用标签栏应用程序模板开始。然后在情节提要的每个视图上,我选择了“编辑器->嵌入->导航控制器”。将导航控制器添加到每个选项卡栏的视图。在初始视图中,我创建了按钮,并将控件从它们拖到每个视图以链接它们。

      然后我更新了以下文件:

      AppDelegate.h

      @interface NRMAppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
      
      @property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
      

      AppDelegate.m

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
      {
          // Override point for customization after application launch.
      
          UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;
          tabController.delegate = self;
          return YES;
      }
      

      MyViewController.m

      -(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
          UINavigationController *navcon = (UINavigationController*)tabBarController.selectedViewController;
      
          [navcon popToRootViewControllerAnimated:NO];
      }
      

      还向按钮添加了 IBAction,以更改按下按钮时选择的选项卡。

      - (IBAction)firstButtonPressed:(id)sender {
          [self.tabBarController setSelectedIndex:1];
      }
      

      我在模拟器、iPhone 5 和第三代 iPod touch 上对其进行了测试。

      【讨论】:

        猜你喜欢
        • 2016-02-23
        • 2019-01-31
        • 2010-12-23
        • 2012-05-11
        • 2019-02-15
        • 1970-01-01
        • 1970-01-01
        • 2011-12-02
        相关资源
        最近更新 更多