objective-c – 如何实现NSPageController浏览webView的历史记录

objective-c – 如何实现NSPageController浏览webView的历史记录,第1张

概述我有一个基于WebView的应用程序,但是我希望用户能够通过在触控板和魔术鼠标上滑动来导航。所以我要执行NSPageController。 我查看了文档和PictureSwiper应用程序,但是这些应用程序不是真正用于webView的。所以,我想知道如何在webView上使用NSPageController。我有一个webView定义为webView和两个动作,goBack:和goForward: 我有一个基于WebVIEw的应用程序,但是我希望用户能够通过在触控板和魔术鼠标上滑动来导航。所以我要执行NSPageController。

我查看了文档和PictureSwiper应用程序,但是这些应用程序不是真正用于webVIEw的。所以,我想知道如何在webVIEw上使用NSPageController。我有一个webVIEw定义为webVIEw和两个动作,goBack:和goForward:分别加载上一页和下一页。

但是,我不知道如何让NSPageController使用一个简单的webVIEw。有一种方法可以做到,但我看不到方法。如果有人可以解释我想要做什么,那将是巨大的。或者如果您感觉特别慷慨,可以下载免费的浏览器源代码示例。 https://sites.google.com/site/infiniteopensyntax/basic-web-browser

该来源显示了我自己的应用程序是如何设置的。如果您想在该应用程序上实现NSPageController,并将其发送给我,我将非常感激。这不是很多,但是如果你这样做,我将添加滑动示例到无限打开语法,并把它的名字。您可以选择许可证。

这是Cocoa,不是Cocoa touch

编辑

好的,现在我只需要确保该应用仍然适用于雪豹。假设我可以通过断开插座来测试。它工作正常,减去后退按钮。为此,我相信我检查NSPageController类。如果不存在,那么我只是跳过使用pageController。

- (IBAction)goBack:(ID)sender {    if (NSClassFromString(@"NSPageController") != Nil)    {        [self.pageController navigateBack:sender];    }    {         //Not 10.8        [webVIEw goBack];    }}
解决方法 您链接到的页面上的下载链接不起作用,所以我会保持我的答案更一般。

如果您使用NSPageController,您不需要保留多个WebVIEws或手动生成快照;它照顾你。在您的情况下,您要在History Mode中使用NSPageController。为此,请将WebVIEw连接到pageController.vIEw。您将需要实现三个NSPageControllerDelegate方法:

- (voID)pageControllerWillStartliveTransition:(NSPageController *)pageController;- (voID)pageController:(NSPageController *)pageController dIDTransitionToObject:(ID)object;- (voID)pageControllerDIDEndliveTransition:(NSPageController *)pageController;

每次WebVIEw进入新页面(不是通过后台/后台 *** 作)时,请在pageController上调用navigateForwardToObject:(id)object。我将使对象成为存储导航页面的用户状态(滚动位置,突出显示的文本,表单内容等)的自定义对象以及页面的WebHistoryItem.用户状态最初可能未定义,但应在pageControllerWillStartliveTransition中设置: 。以下是一个例子:

- (voID)pageControllerWillStartliveTransition:(NSPageController *)pageController{  // Remember user state  MyCustomObject *object = [self.pageController.arrangedobjects objectAtIndex:self.pageController.selectedindex];  object.userState = someUserState;}

当该方法返回时,pageController将隐藏其视图(WebVIEw),并显示其视图的先前状态的快照。

一旦滑动动画完成,pageController:dIDTransitionToObject:将被调用。凉。您应该在该方法中做什么是从对象中抓取WebHistoryItem,并使用goToBackForwardItem:方法使WebVIEw返回到该项目。您还应该保持存储在对象中的用户状态(例如,在实例变量中),因为一旦WebVIEw完成加载,您将需要恢复它。

最后,在pageControllerDIDEndliveTransition中:在重新显示WebVIEw之前,您需要完成任何 *** 作。我期望这不会是什么,因为在WebVIEw完成加载之前,用户状态没有被还原,所以在实现过程中需要的是[pageController completeTransition]。

最后一个细节是后退/前进按钮。你应该像往常一样实现它们,也可以在pageController上调用navigateBack:或navigateForward。

这几乎涵盖了它。我没有真正尝试过这个具体的例子,所以让我知道如果你遇到任何问题。

编辑

以下是我修改源代码以获取基本的NSPageController功能的方法。在AppDelegate头文件中添加一个NSPageController IBOutlet属性。在您的MainMenu.xib文件中,添加页面控制器,将其视图连接到WebVIEw,使AppDelegate其代理,并将其引用到我们刚刚在AppDelegate中创建的属性。另外,让你的AppDelegate你的WebVIEw的frameLoadDelegate。在basicWebAppDelegate.m中添加一个私有属性:

@interface basicWebAppDelegate ()@property (assign) ID currentItem;@end

然后添加以下内部实现:

#pragma mark - WebFrameLoadDelegate- (voID)webVIEw:(WebVIEw *)sender dIDCommitLoadForFrame:(WebFrame *)frame {  if (frame == [sender mainFrame]) {    ID object = [sender.backForwardList currentItem];    BOol isCurrentItem = self.currentItem && (object == self.currentItem) ? YES : NO;    if (!isCurrentItem) {      [self.pageController navigateForwardToObject:[sender.backForwardList currentItem]];    }  }}#pragma mark - NSPageControllerDelegate- (voID)pageControllerWillStartliveTransition:(NSPageController *)pageController {  self.currentItem = [self.webVIEw.backForwardList currentItem];  // Here is where you'll save any state for your pageController.arrangedobjects[pageController.selectedindex] object}- (voID)pageController:(NSPageController *)pageController dIDTransitionToObject:(ID)object {  BOol isCurrentItem = self.currentItem && (object == self.currentItem) ? YES : NO;  if (!isCurrentItem) {    self.currentItem = object;    [self.webVIEw goToBackForwardItem:object];  }}- (voID)pageControllerDIDEndliveTransition:(NSPageController *)pageController {  self.currentItem = nil;  [pageController completeTransition];}

最后,更改你的goBack:和goForward:动作,分别调用[self.pageController navigateBack:sender]和[self.pageController navigateForward:sender]。

请注意,我没有在这里保存任何用户状态,而是直接使用WebHistoryItems作为对象。你可能需要做不同的事情。

如果您需要更多帮助,请告诉我们

总结

以上是内存溢出为你收集整理的objective-c – 如何实现NSPageController浏览webView的历史记录全部内容,希望文章能够帮你解决objective-c – 如何实现NSPageController浏览webView的历史记录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1035600.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存