我正在制作一个简单的标签栏iPhone应用程序。它有两个选项卡,一个带有UIWebView,另一个带有几个用于保存设置的文本字段,还有一个用于保存设置的按钮。
我想要做的是当用户在设置选项卡/视图上单击“保存”时重新加载UIWebView。我已经保存了设置,我只需要弄清楚如何调用UIWebView来自行刷新。
我对视图如何将消息发送到另一个视图感到困惑。
答案 0 :(得分: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];
答案 1 :(得分:4)
我所做的就是让他们通过AppDelegate互相交流。
例如:
View1将具有以下功能:
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate myFunction];
MyAppDelegate有一个名为myFunction的函数,可以执行某些操作,或者调用:
[viewController myViewFunction];
我已经设置了一个非常好的系统来加载多个视图(并来回导航,好像它们是不同的屏幕)。我只是没有时间写这篇文章并将其发布到pushplay.net - 但我会在接下来的几天内尝试这样做......
===
编辑:好的,我发布了我的内容。任何意见将不胜感激。http://pushplay.net/blog_detail.php?id=27
我理解下面的评论者所说的内容,但我还没有看到一个无缝工作的示例,基于多个视图控制器需要在彼此之间导航。
答案 2 :(得分:1)
这取决于特定应用程序的复杂性和该应用程序中的对象模型:
如果视图相关且消息仅与视图相关,则他们可以直接发送彼此的消息。例如,视图可以(并且应该)将消息直接发送到它的子视图,并且它们可以直接向其父视图发送消息。
如果他们的观点不相关但显示有关相同信息的数据,您应该通过viewController代理消息 - 这是您拥有视图控制器的原因。
如果您的应用程序具有强大的MVC架构,则应通过更新模型对象并通过其viewControllers将其级联到视图来间接完成通信。
答案 3 :(得分:1)
在这种情况下,您可能最好让您的应用程序委托在应用程序启动时将控制器保持Web视图作为其他视图控制器的委托 - 请考虑使用协议使其保持干净,但对于简单的事情您总是可以将委托类型声明为包含视图控制器的Web视图。
通知也是一个好主意,没有任何任务对他们来说太小 - 但你应该知道在dealloc这样的地方取消订阅通知很重要。对于标签栏视图控制器的顶级,但实际上并不重要。
答案 4 :(得分: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
此致
凯尔