6

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

我对 WebView 进行了子类化,以便能够在专注时捕捉击键事件。这部分有效。

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

我试图思考如何使用委托来实现我的目标,但我缺乏知识使我无法完成这个简单的应用程序。

我还听说过 NSNotification,我的 WebView 可以发送一个通知,告诉我我的 Window 可以捕获并更改其子项的可见性,但我也不知道如何实现。

任何人都可以指出我正确的方向吗?

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

感谢,并有一个愉快的一天!

4

2 回答 2

1

使用通知:说你在哪里捕捉到击键,你有一个 NSString 对象,其中包含一些 ID 来标识所需的 WebView(例如@"1"@"2"),并且每个 Web 视图都有一个viewID属性。因此,在您收到击键的地方,您将添加:

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

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

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

然后实现 -switchViewNotification: 方法:

- (void)switchViewNotification:(NSNotification *)aNotification {

    NSString    *newViewID=[aNotification object];

    if([self.viewID isEqualToString:newViewID])
    {
        // show this web view
    }
    else
    {
        // hide this web view
    }
}

最后一块:当 web 视图消失时,您需要删除观察者,因此将其添加到您的-dealloc方法中:

[[NSNotificationCenter defaultCenter]removeObserver:self];

那应该这样做。

于 2013-06-06T14:54:45.070 回答
0

如果我正确理解了您的问题,我认为为了在应用程序中保存小状态,您可以使用 NSUserDefaults,这是一个示例

我希望我有所帮助,祝你好运:)

于 2013-05-30T18:29:59.330 回答