【问题标题】:How to get the RootViewController from a UITabBarItem如何从 UITabBarItem 获取 RootViewController
【发布时间】:2015-03-04 20:00:21
【问题描述】:

我什至不确定标题是否正确,但我不明白如何解释它,所以在这里。我将逐步向您展示我所做的事情,以便您了解。

首先,我使用的是 UITabBarController,其中我得到了三个不同的项目。

1) 应用程序启动,它向我展示了第一个项目,它是 UITableView

2) 我点击一个单元格,它会将我推到该单元格的详细视图。

3) 我从那里导航到另一个 TabBarItem

4) 我导航回第一个 TabBarItem,它仍然向我显示步骤 3) 中的视图。我不希望它向我展示步骤 1 中的第一个视图)

我怎样才能做到这一点?

【问题讨论】:

  • 所以你的标签栏控制器加载一个 UITableView 作为它的第一个标签。您单击表格视图中的一个单元格,该单元格将带您进入详细视图。然后单击另一个选项卡。然后,当您单击第一个选项卡时,您希望显示初始表格视图而不是详细视图?
  • 完全正确,@ToddGower

标签: ios objective-c uitableview uinavigationcontroller uitabbarcontroller


【解决方案1】:

可以实现UITabBarController委托方法:

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

当标签被选中时,它会通知您。

然后,如果您没有对 UIViewControllers 的引用,您可以使用 UITabBar 访问 UIViewControllers:

@property(nonatomic, copy) NSArray *viewControllers

从中获取您想要重置并调用的相应UIViewController(或UITableViewController)的引用:

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated

上面是UINavigationController。或者以这种方式为该调用创建一个公共方法调用popToRootViewController

编辑:

您的 AppDelegate 应如下所示:

@interface AppDelegate () <UITabBarControllerDelegate>
@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
    tabBarController.delegate = self;

    return YES;
}

- (void)tabBarController:(UITabBarController *)tabBarController
 didSelectViewController:(UIViewController *)viewController {
    NSLog(@"was selecated");
}

【讨论】:

  • 我实现了 UITabBarDelegate 方法并写了 NSLog@"test",每次点击 TabBarItem 什么都没有出现?
  • 您是否将代理出口从 IB 连接到您的 AppDelegate
  • 您在解决方案中写的内容是否有任何教程?因为我不知道你在说什么。每当我使用委托方法时,我都会将委托交给自己。之前从未将任何东西连接到 AppDelegate
  • UITabBarController 是您通过编程还是通过 IB 创建的?
  • 我是使用 StoryBoard 而不是 IB 或以编程方式完成的?
【解决方案2】:

假设您已经在 AppDelegate 中设置了标签栏控制器,您希望将其设为 &lt;UITabBarControllerDelegate&gt;

在你的 AppDelegate.m 中你想像这样实现这个方法:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    if ([viewController isKindOfClass:[UINavigationController class]]) {
        [(UINavigationController*)viewController popToRootViewControllerAnimated:YES];
    }
}

【讨论】:

    猜你喜欢
    • 2010-12-20
    • 2018-05-25
    • 2019-11-19
    • 2011-07-29
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多