我应该在哪里创建和呈现整个 iPhone 应用程序中使用的模态 ViewController

Posted

技术标签:

【中文标题】我应该在哪里创建和呈现整个 iPhone 应用程序中使用的模态 ViewController【英文标题】:Where should I create and present a Modal ViewController used throughout iPhone application 【发布时间】:2012-04-27 09:24:19 【问题描述】:

我有一个使用 UITabBarController 作为其主界面的 iPhone 应用程序。该应用程序还大量使用从各种选项卡呈现的模态 UINavigationController。

我需要以模态方式呈现一个 ViewController,它可以从应用程序中的各种位置触发。在触发它的所有视图控制器之间复制创建和呈现它的代码似乎是一个糟糕的主意。我想把这段代码放在一个地方,并从任何 viewController 想要呈现它的地方触发它。

这个集中的位置应该在哪里?我的根 ViewController 是一个 UITabBarController 所以在那里不好,我讨厌将视图功能集中到 AppDelegate 中。

【问题讨论】:

【参考方案1】:

我会创建一个新的类文件,它具有呈现您想要的视图的功能。这样你只需要编写一次代码来呈现模态视图,每个需要使用它的视图都可以通过一行代码调用助手类上的函数。

@interface ApplicationHelper : NSObject 


+(void)showMyModalView:(UIViewController *)parentViewController;

@end

实施:

#import "ApplicationHelper.h"
#import "ViewController.h"

@implementation ApplicationHelper

+(void)showMyModalView:(UIViewController *)parentViewController

      ViewController *vc = [[ViewController alloc] init];

      [parentViewController presentModalViewController:vc animated:YES];

@end

然后在每个视图控制器中导入 ApplicationHelper 并调用 showMyModalView 方法

[ApplicationHelper showMyModalView:me];

这允许您将所有视图处理代码保存在一个单独的文件中以供您的应用程序委托使用。

【讨论】:

谢谢。是的,这比到处重复相同的代码要好。【参考方案2】:

不要试图传递引用。

只需 alloc] init]; 一个新的实例,无论您需要在哪里使用它。

例如。

MyModalViewController *controller = [[MyModalViewController alloc] init];
[self presentModalViewController:controller animated:YES];

【讨论】:

这看起来真的很浪费,而且最终会在整个应用程序中产生不必要的重复代码。 创建一个对象然后显示它,还有什么比这更简单的呢?【参考方案3】:

您可以创建一个 UIViewController 并为其实现一些委托方法。然后你可以像这样展示视图控制器:

[currentViewController presentViewController:yourViewController animated:YES];

当您的视图控制器中触发事件时,它将委托给调用者。

在这种情况下,您只需为“YourViewController”编写一次代码,然后在您想要的任何地方重复使用它。你也可以使用 pushviewcontroller:

[self.navigationController pushviewcontroller:yourViewController animated:YES];

【讨论】:

我了解如何呈现模态视图控制器。通过我的应用程序传递对单个 ViewController 的引用对我来说毫无意义。我也不喜欢使用 AppDelegate 作为全局变量的注册表。使用 NSNotifications 从单个位置触发模态 ViewController 的演示对我来说更有意义。我只是不知道那个位置应该在哪里。

以上是关于我应该在哪里创建和呈现整个 iPhone 应用程序中使用的模态 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL场景 - Iphone

下一个.js。将全球供应商放在哪里?

GWT:刷新页面会导致整个 Web 应用程序重新启动。我应该在哪里保存状态?

在 iphone/ipad 应用程序中在哪里添加加载视图?

mac 开发新手 - 我应该从哪里开始?

iOS Safari不会首次呈现整个页面