ios - 使用 Objective-C iOS 制作选项卡切换布局

标签 ios objective-c

这是大多数移动应用程序使用的常见设计模式

+-------------------------+
|         title           |
+-------------------------+
|                         |
|                         |
|                         |
|                         |
|                         |
|                         |
|        content          |
|                         |
|                         |
|                         |
|                         |
|                         |
+-------------------------+
| |tab1|   |tab2|  |tab3| |
+-------------------------+

主要思想是当用户按下 tab1 或 tab2 或 tab3 时内容会相应地改变。

我现在正在做的(使用代码而不是 Storyboard)是制作一个 ViewController 来显示内容和底部面板,并制作一个 UINavigationController 来显示标题

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];        
    ViewController *viewController = [[ViewController alloc] init];   
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
}

当用户按下底部选项卡更改内容 View 时,同时使用 subviews 更改内容,但我发现在更改内容时我发现:

  • View 将不会以标题的高度正确开始。
  • 此外,我应该将所有逻辑都写在同一个 View Controller 中,这会导致代码困惑。

如何实现这样的布局?

最佳答案

看看UITabBarController ,一个默认组件,负责在屏幕底部显示选项卡图标并自动管理选项卡之间的转换。每个选项卡也是一个独立的 View Controller ,因此您的代码更有条理。对于标题,您可以使用 UINavigationController 作为每个要有标题栏的选项卡的根 Controller

看看this answer获取分步指南。

关于ios - 使用 Objective-C iOS 制作选项卡切换布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45893319/

相关文章:

ios - NSOperation 没有被正确取消

c# - UITest 失败,返回 : "SetUp : System.InvalidOperationException"

ios - 即使超过缓存控制期限限制,也会从缓存中加载值

ios - 如何在 iOS 中创建自动完成 [实时] 文本字段,它会在您键入时提供建议

ios - 为什么 iPhone 5S 和 iPad Air 之前的设备在转换 null 变量时不会崩溃?

objective-c - SceneKit 避免在特定节点上照明

ios - 多个 TableView 行选择 - Swift

objective-c - UIGestureRecognizer 阻止 tableview 滚动

objective-c - 为什么 C 标准提供未确定大小的类型(int、long long、char 与 int32_t、int64_t、uint8_t 等)?

ios - dispatch_get_main_queue block 中的代码