模态UITabBarController设计

Posted

技术标签:

【中文标题】模态UITabBarController设计【英文标题】:Modal UITabBarController Design 【发布时间】:2011-09-03 06:00:36 【问题描述】:

我正在设计一个 iPhone 应用程序,我希望在其中有一个主屏幕。然后,我希望用户能够点击此屏幕右下角的信息按钮,并进入一个完全不同的界面,该界面将处理选项和各种形式的数据显示。

在对 Apple 文档中的视图控制器进行了一些研究后,我确定我肯定想在按下信息按钮时使用模式视图。不过,我的问题是最适合的接口是 UITabBarController。我想在我的 UITabBarController 中有一个代表主屏幕的选项卡,当被触摸时,它会告诉主屏幕关闭 UITabBarController。

我在网络上看到了很多示例,其中人们添加了带有按钮的自定义视图控制器,这些按钮触发了模式视图解除到 UITabBarController 上的选项卡,但我想完全避免显示额外的视图。一旦用户触摸主屏幕选项卡,我希望模式视图关闭。我已经尝试过将主屏幕放置在 UITabBarController 中的方法,但并不满意,所以我希望那里有人熟悉罕见的模态 UITabBarController 设计并能给我一些指导。

这有可能吗?如果没有,我怎样才能以不同的方式完成相同的界面流程?

我还没有尝试过,但是有没有办法可以设置 UITabBarController 用一个空的 UIViewController 来表示主屏幕并调用 UITabBarControllerDelegate 以在空视图出现之前将关闭消息发送到主屏幕?

【问题讨论】:

【参考方案1】:

好的,我想通了。我承认这可能不是最正统的 UI 设计,但我认为它确实具有直观意义……不过,有人可能应该将我链接到这违反了 Apple UI 指南。

以下代码将允许用户按下一个信息按钮,该按钮将为模态 UITabBarController 的演示设置动画。在此示例中,UITabBarController 只有一个选项卡,并且选项卡栏没有设置图标或标题。一旦进入模态视图,用户可以单击栏中的第一个选项卡,模态视图将被关闭。 (这在逻辑上意味着您要告诉 UITabBarController 从第一个以外的索引开始。)

- (IBAction)infoButtonPressed

     UIViewController *mainScreen = [[UIViewController alloc] init];
     NSArray *viewControllers = [[NSArray alloc] initWithObjects:mainScreen, nil];
     UITabBarController *tabBarController = [[UITabBarController alloc] init];
     tabBarController.viewControllers = viewControllers;
     //This means that "self" needs to implement the UITabBarControllerDelegate protocol
     tabBarController.delegate = self;
     [self presentModalViewController:tabBarController animated:YES];

     [mainScreen release];
     [viewControllers release];
     [tabBarController release];


- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

     if (viewController == [tabBarController.viewControllers objectAtIndex:0]) 
          [self dismissModalViewControllerAnimated:YES];
     

但是,我现在收到关于两阶段旋转动画的警告:

Using two-stage rotation animation. To use the smoother single-stage animation, this application must remove two-stage method implementations.
Using two-stage rotation animation is not supported when rotating more than one view controller or view controllers not the window delegate

初步研究表明这是因为我使用UIImageViewController 在我的主屏幕视图上显示背景,但后来我将其更改为UIColor initWithPatternImage。有谁知道如何摆脱警告——或者忽略它是否重要?

【讨论】:

【参考方案2】:

听起来令人困惑(或至少不寻常)的用户体验。标签应该是应用程序的主要导航级别。

您应该考虑在分段按钮或带有后退导航的垂直列表中显示部分(例如首选项应用程序)

【讨论】:

最后,你是对的,追求不同的设计可能更有意义,但现在我想看看结果如何。

以上是关于模态UITabBarController设计的主要内容,如果未能解决你的问题,请参考以下文章

在 UITabBarController 中呈现模态视图

如何从自己的子视图控制器中关闭模态 uitabbarcontroller

从 uitabbarController 视图中关闭模态视图

显示模态视图的 Monotouch UITabBarController 部分

2 ViewControllers 以模态方式呈现 UITabBarController

当 UIViewController 模态显示时,UINavigationController(在 UITabBarController 选项卡内)丢失堆栈