按下标签栏项目时如何关闭视图?
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 上对其进行了测试。
【讨论】:
以上是关于按下标签栏项目时如何关闭视图?的主要内容,如果未能解决你的问题,请参考以下文章