我查看了文档和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的历史记录所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)