从子类WebView更改Window的元素可见性

时间:2013-05-27 19:58:33

标签: objective-c xcode cocoa webview

我正在尝试制作一个非常简单的应用。它只是一个3页的超级简单的Web浏览器。 3 webview,2随时隐藏。

我将WebView子类化,以便能够在聚焦时捕获击键事件。这部分有效。

现在,当我按下CMD + 1,CMD + 2,CMD + 3(1显示第一个webview,隐藏2个其他等)时,我需要回调回家并更改其他WebViews的可见性。

我试着考虑如何使用代表来实现我的目标,但是我缺乏知识使我无法完成这个简单的应用程序。

我也听说过NSNotification,我的WebView可以发送一个通知,我的Window可以捕获并改变其子女的可见性,但我也不确定如何实现。

有人能指出我正确的方向吗?

TLDR; 例如,当WebView捕获CMD + 1时,我希望能够在其他WebView中调用方法来隐藏它们。

谢谢,祝你有愉快的一天!

2 个答案:

答案 0 :(得分:1)

使用通知:说明你在哪里捕获键击,你有一个NSString对象包含一些ID来标识所需的WebView(例如@"1"@"2"等),并且每个Web视图都有一个{ {1}}财产。所以在你收到击键的地方,你要加上:

viewID

在初始化Web视图的地方(例如-awakeFromNib或-init),添加以下代码:

[[NSNotificationCenter defaultCenter]
    postNotificationName:@"ChangeMyActiveWebView"
    object:newViewID  // <- contains string to identify the desired web view
];

然后实现-switchViewNotification:方法:

[[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(switchViewNotification:)
    name:@"ChangeMyActiveWebView"
    object:nil  // Means any object
];

最终作品:您需要在网络视图消失后删除观察者,因此请将其添加到您的- (void)switchViewNotification:(NSNotification *)aNotification { NSString *newViewID=[aNotification object]; if([self.viewID isEqualToString:newViewID]) { // show this web view } else { // hide this web view } } 方法中:

-dealloc

应该这样做。

答案 1 :(得分:0)

如果我正确理解了您的问题,我认为为了在整个应用中保存小状态,您可以使用NSUserDefaults,这里是Example

我希望我帮助过,最好的运气:)