按下标签栏项目时如何关闭视图?

Posted

技术标签:

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

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

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

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

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

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

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

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

【问题讨论】:

请查看您的代码按下标签栏项目事件 您能否向我们展示您加载新视图(视频/表演者/游戏/设置)的代码? 我将控件从Video按钮拖到VideoList View。除了将所选标签更改为视频标签的 buttonPressed 操作之外,我没有编写任何其他代码。 【参考方案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 上对其进行了测试。

【讨论】:

以上是关于按下标签栏项目时如何关闭视图?的主要内容,如果未能解决你的问题,请参考以下文章

切换到另一个视图控制器时,如何保持标签栏可见? [关闭]

在 webview 上刷新标签栏项目

关闭模态呈现的视图控制器后切换标签栏控制器视图控制器

添加 TabBar 元素

如何从“更多”标签栏项目中的编辑检测标签栏项目更改?

按下“更多”按钮时,如何在标签栏控制器内设置导航栏颜色和单元格大小?