UITabBarController 委托方法永远不会被调用
Posted
技术标签:
【中文标题】UITabBarController 委托方法永远不会被调用【英文标题】:UITabBarController delegate methods never get called 【发布时间】:2014-02-04 10:19:43 【问题描述】:我目前正在重构我的 iPad 应用程序,而不是 NavigationBar 上的按钮,我想将注销按钮作为 TabBar 按钮项。
我所有的视图都在一个独特的 StoryBoard 中,所以我通过这种方式在我的 Appdelegate.m 中获取了我的 TabBar:
// Add logout tab to tabbar
storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *tabbar = (UITabBarController *)[storyboard instantiateViewControllerWithIdentifier:@"tabbar"];
[tabbar setDelegate:self];
当然委托协议是在我的 Appdelegate.h 中声明的
@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
之后,我创建了一个空的 viewController 以创建我的注销选项卡:
UIViewController *logout = [[UIViewController alloc]init];
然后我将 tabbar viewControllers 作为 NSMutableArray 并添加我的注销 VC:
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[tabbar viewControllers]];
[viewControllers addObject:logout];
最后我用我的新数组设置了标签栏视图控制器:
[tabbar setViewControllers:viewControllers];
我认为这些步骤是正确的。 那么为什么当我更改显示的选项卡时没有调用 didSelectViewController 呢?
如果有帮助,这是我的 didSelectViewController 方法(写在 AppDelegate.m 中)
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
NSLog(@"onglet sélectionné : %d / %d", [tabBarController selectedIndex], [[tabBarController viewControllers]count]);
//select the index where your logout button is
if ([tabBarController selectedIndex] == [[tabBarController viewControllers]count]-1)
NSLog(@"logout");
提前感谢您的帮助!
【问题讨论】:
Swift answer 【参考方案1】:将[self setDelegate:self];
放入您的 ViewDidLoad 或对象初始化的地方
【讨论】:
您的意思是在另一个 viewController 中设置委托?编辑我问这个是因为目前您在我的帖子中看到的所有代码都在 Appdelegate.m 中,并且该文件没有 viewDidLoad 方法 有效!我在另一个 viewController 中设置了委托,然后调用了该方法【参考方案2】:尝试初始化标签栏对象;
// Add logout tab to tabbar
storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *tabbar = [[UITabBarController alloc] init];
tabbar = (UITabBarController *)[storyboard instantiateViewControllerWithIdentifier:@"tabbar"];
[tabbar setDelegate:self];
【讨论】:
以上是关于UITabBarController 委托方法永远不会被调用的主要内容,如果未能解决你的问题,请参考以下文章
如何从应用程序委托访问 uitabbarcontroller 内的 uinavigationcontroller 内的 uitableview?
将容器控制器(根视图控制器)设置为 UITabBarController 中视图控制器的委托
从ios中的UITabBarController中删除标签栏的安全方法
将 managedObjectContext 传递给 UITabBarController 问题
UITableView 永远不会在其委托上调用 tableView:shouldShowMenuForRowAtIndexPath: