• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 更改 Storyboard 后未调用 Tabbar 委托(delegate)方法

[复制链接]
菜鸟教程小白 发表于 2022-12-12 14:37:55 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在登录 Storyboard 中有 loginsignup View Controller ,而不是在主 Storyboard 中。

一旦注册或登录成功,然后我将登录 Storyboard更改为 Main。以下代码有效,但是当我选择任何选项卡时,它不会调用 AppDelegate

中的选项卡委托(delegate)方法

但是,如果用户已经成功注册或登录,则它会调用以下标签栏委托(delegate)方法。

LoginViewController.m

if(isLoginSuccess)
{
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName"Main" bundle:nil];
    CustomTabBarViewController *tbc = [mainStoryboard instantiateViewControllerWithIdentifier"tabbar"];
    tbc.selectedIndex = 2;
    [self presentViewController:tbc animated:YES completion:nil];
}

AppDeletage.m

- (BOOL)applicationUIApplication *)application didFinishLaunchingWithOptionsNSDictionary *)launchOptions {
    CustomTabBarViewController *tabBarController = (CustomTabBarViewController *)self.window.rootViewController;
    tabBarController.delegate = self;
    return YES;
}

-(void) tabBarControllerUITabBarController *)tabBarController didSelectViewControllerUIViewController *)viewController
{
    if (tabBarController.selectedIndex == 2) {
        if(![self isRegistered])
        {
            UIStoryboard *loginStoryboard = [UIStoryboard storyboardWithName"LoginStoryboard" bundle:nil];
            UIViewController *vc = [loginStoryboard instantiateViewControllerWithIdentifier"LoginViewController"];
            [ROOTVIEW presentViewController:vc animated:YES completion:nil];
        }
        else
        {
            tabBarController.selectedIndex = 2;
        }
    }
}

更新:

AppDelegate 没有被调用,但我想知道为什么以下代码在用户注销后没有在 AppDelegate 中打开 Loginstoryboard。

#define ROOTVIEW [[[UIApplication sharedApplication] keyWindow] rootViewController]


UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName"LoginStoryboard" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier"LoginViewController"];
[ROOTVIEW presentViewController:vc animated:YES completion:nil];



Best Answer-推荐答案


请在下面找到代码。

- (BOOL)applicationUIApplication *)application didFinishLaunchingWithOptionsNSDictionary *)launchOptions {
    UIStoryboard *main = [UIStoryboard storyboardWithName"Main" bundle:nil];
    UITabBarController *tabController = [main instantiateViewControllerWithIdentifier"TabbarController"];
    tabController.delegate = self;
    return YES;
}

-(void) tabBarControllerUITabBarController *)tabBarController didSelectViewControllerUIViewController *)viewController{
    NSLog(@"Selected Index - %lu",(unsigned long)tabBarController.selectedIndex);
}

关于ViewController的按钮点击方法,

- (IBAction)btnLoginTappedid)sender {
    UIStoryboard *main = [UIStoryboard storyboardWithName"Main" bundle:nil];
    UITabBarController *tabController = [main instantiateViewControllerWithIdentifier"TabbarController"];
    tabController.selectedIndex = 1;
    [self presentViewController:tabController animated:YES completion:nil];
}

然后在Main.storyboard上,将ObjectObject Library拖到First Responder下面标签栏 Controller 场景,将对象类设置为AppDelegate,然后右键单击标签栏 Controller 并将代理设置为该对象类,如下图所示。

enter image description here

让我知道它是否有效,我已准备好帮助解决问题。

关于ios - 更改 Storyboard 后未调用 Tabbar 委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48981920/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap