【问题标题】:How do i make the more button go always to more view?如何让更多按钮始终显示更多视图?
【发布时间】:2023-03-04 15:01:01
【问题描述】:

我正在为带有标签栏的 ios 开发应用程序。我在栏上有超过 5 个按钮,所以在 iphone 上我有更多的按钮。 现在,假设我有这个按钮: Button1 Button2 Button3 Button4 More(和内部更多) Button5 Button6。 如果我单击更多,然后单击 Button5,我将进入相对于 Button5 的视图。然后我单击 Button2(不在“更多”中)并进入相对于 Button2 的视图。 到目前为止,一切都很好。 现在,如果我单击更多,我不会转到更多选项卡,而是返回相对于 Button5 的视图。 如何让更多按钮始终转到更多视图?

【问题讨论】:

    标签: ios objective-c uitabbar


    【解决方案1】:

    您不需要添加更多按钮。只需将视图控制器设置为 UITabBarController

    - (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated
    

    如果您有超过 5 个视图控制器,它会自动创建一个更多按钮!即 NSArray 的计数大于 5。

    【讨论】:

    • 是的,我知道。问题是如何使单击按钮始终导致更多视图显示第五个之后的按钮链接,而不是显示在更多视图中选择的最后一个视图^^
    • 标签栏用于显示您的自定义项目的空间有限。如果您将六个或更多自定义视图控制器添加到标签栏控制器,则标签栏控制器仅显示前四个项目以及标签栏上的标准更多项目。点击更多项目会弹出一个标准界面,用于选择剩余项目。标准更多项目的界面包括一个编辑按钮,允许用户重新配置标签栏。
    • 我实际上并没有得到你想要的东西!可以详细说明吗?
    • 当我按下标准界面的按钮选择剩余项目时,我被引导到相对视图。如果我单击选项卡栏上的前四个按钮之一,然后单击“更多”,我将不会被定向到标准界面,而是指向我之前选择的视图。我想避免这种情况,当我点击“更多”时总是被重定向到标准界面
    • 感谢您提供重要信息“如果您有超过 5 个视图控制器,它将自动创建一个更多按钮!即 NSArray 的计数大于 5。”它对初学者真的很有帮助:)
    【解决方案2】:

    您可以做的另一种方法是,每当用户按下更多按钮时,第一个按钮就会被移除,而其他按钮会被添加。 基本上,您可以创建一个数组并将所有按钮保留在其中。然后根据按下的按钮,您可以导航到该特定视图。

    例如:

    最初你有:Button1Button2Button3Button4Next

    点击下一步后:PrevButton3Button4Button5Button6

    【讨论】:

    • 酷。我猜我在目标 c 方面不是那么专家。 ^^'
    【解决方案3】:

    我在我的应用程序 delegate.m 中使用了这段代码来解决问题

    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
        UITabBarController* tabBarController2 = (UITabBarController*)self.window.rootViewController;
        if (tabBarController2.selectedIndex < 4) {
            [tabBarController2.moreNavigationController popViewControllerAnimated:NO];
        }
    }
    

    【讨论】:

    • 有没有办法在标签栏中显示所有六个按钮,而不是显示包含按钮 5 和按钮 6 的更多按钮,请建议
    【解决方案4】:
        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        UIViewController *viewController1 = [[UIViewController alloc] init];
        UIViewController *viewController2 = [[UIViewController alloc] init];
        UIViewController *viewController3 = [[UIViewController alloc] init];
        UIViewController *viewController4 = [[UIViewController alloc] init];
        UIViewController *viewController5 = [[UIViewController alloc] init];
        UIViewController *viewController6 = [[UIViewController alloc] init];
        UIViewController *viewController7 = [[UIViewController alloc] init];
        UIViewController *viewController8 = [[UIViewController alloc] init];
        UIViewController *viewController9 = [[UIViewController alloc] init];
    
        [viewController1.view setBackgroundColor:[UIColor whiteColor]];
        [viewController2.view setBackgroundColor:[UIColor redColor]];
        [viewController3.view setBackgroundColor:[UIColor greenColor]];
        [viewController4.view setBackgroundColor:[UIColor grayColor]];
        [viewController5.view setBackgroundColor:[UIColor blueColor]];
        [viewController6.view setBackgroundColor:[UIColor yellowColor]];
        [viewController7.view setBackgroundColor:[UIColor brownColor]];
        [viewController8.view setBackgroundColor:[UIColor magentaColor]];
        [viewController9.view setBackgroundColor:[UIColor purpleColor]];
    
        [viewController1 setTitle:@"one"];
        [viewController2 setTitle:@"two"];
        [viewController3 setTitle:@"three"];
        [viewController4 setTitle:@"four"];
        [viewController5 setTitle:@"five"];
        [viewController6 setTitle:@"six"];
        [viewController7 setTitle:@"seven"];
        [viewController8 setTitle:@"eight"];
        [viewController9 setTitle:@"nine"];
    
        self.tabBarController = [[UITabBarController alloc] init];
        self.tabBarController.viewControllers = @[viewController1, viewController2, viewController3, viewController4, viewController5, viewController6, viewController7, viewController8, viewController9];
        self.window.rootViewController = self.tabBarController;
        [self.window makeKeyAndVisible];
        return YES;
    }
    

    我添加了一个我尝试过的示例 AppDelegate 代码,它对我来说工作得非常好。让我知道你在这方面遇到了什么问题。

    【讨论】:

    • 我找到了一个更简单的解决方案,但这太棒了!太感谢了!对于像我这样的新手来说,这是纯金!
    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多