1

我正在制作一个简单的标签栏 iPhone 应用程序。它有两个选项卡,一个带有 UIWebView,另一个带有几个用于保存设置的文本字段,以及一个用于保存设置的按钮。

我想要做的是在用户单击设置选项卡/视图上的保存时重新加载 UIWebView。我已经保存了设置,我只需要弄清楚如何进行调用以使 UIWebView 自行刷新。

我对视图如何将消息发送到另一个视图感到困惑。

4

5 回答 5

5

您在 UITabBarController 框架内使用这两个视图的事实与问题的核心无关;也就是说,您希望应用程序的一部分被告知另一部分发生了某些事情。这样做的典型方法是使用 KVO,或者像这样使用 NSNotificationCenter:

// Register interest in finding out when the settings are changed
[[NSNotificationCenter defaultCenter] addObserver:myWebViewController 
    selector:@selector(refreshWebView:) name:@"settingsSaved" object:nil];

// Notify interested parties that the settings have changed
[[NSNotificationCenter defaultCenter] postNotificationName:@"settingsSaved" object:nil];
于 2009-05-06T06:19:20.407 回答
4

我所做的是让他们通过 AppDelegate 相互交谈。

例如:

View1 将具有以下功能:

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    [appDelegate myFunction];

MyAppDelegate 有一个名为 myFunction 的函数,它要么做某事,要么调用:

[viewController myViewFunction];

我已经建立了一个非常好的系统来加载多个视图(并且来回导航,就好像它们是不同的屏幕一样)。我只是没有时间写这篇文章并将其发布到 pushplay.net——但我会在接下来的几天内尝试这样做......

===

编辑:好的,我已经发布了我所拥有的。任何意见将不胜感激。

http://pushplay.net/blog_detail.php?id=27

我理解下面的评论者在说什么,但我还没有看到一个基于多个视图控制器需要在彼此之间导航的无缝工作的示例。

于 2009-05-05T23:04:28.440 回答
1

它取决于特定应用程序的复杂性和该应用程序中的对象模型:

  • 如果视图是相关的并且消息仅与视图相关,那么它们可以直接相互发送消息。例如,视图可以(并且应该)直接向其子视图发送消息,并且它们可以直接向其父视图发送消息。

  • 如果他们的视图不相关但显示有关相同信息的数据,则您应该通过 viewController 代理消息 - 这正是您拥有视图控制器的原因。

  • 如果您有一个具有强大 MVC 架构的复杂应用程序,则应通过更新模型对象并通过其 viewController 将其级联到视图来间接完成通信。

于 2009-05-06T06:20:42.497 回答
1

在这种情况下,您最好让您的应用程序委托在应用程序启动时将持有 Web 视图的控制器分配为您的其他视图控制器的委托 - 考虑使用协议使其干净,但对于简单的事情,您总是可以将委托类型声明为您的 Web 视图持有视图控制器。

通知也是一个好主意,没有什么任务对他们来说太小了——但你应该知道,在诸如 dealloc 之类的地方取消订阅通知很重要。对于标签栏视图控制器的顶层,这并不重要。

于 2009-05-06T06:51:06.713 回答
0

您始终可以在标签视图控制器中设置一个指向 Web 视图的实例变量。只需将其设置为 IBOutlet,将其连接到 Interface Builder,然后在实例变量上调用您的方法。

.h 文件:

IBOutlet UIWebView *webView;

@property (nonatomic, retain) UIWebView *webView;

.m 文件:

@synthesize webView;

//Then later in your method
[webView refresh]; //or however you do it

问候,

凯尔

于 2009-05-07T04:45:06.990 回答