![]() | 1 Veelian 2012-09-10 15:54:59 +08:00 ![]() **WebView 内含的 NSScrollView** 不是这样的,WebView是继承自NSScrollView,而不是内含的NSScrollView,你可以写个WebView继承CLScrollView,实现NSWebViewDelegate方法 |
![]() | 2 lldong 2012-09-10 16:26:35 +08:00 ![]() 或许可以用这个运行时API Class class_setSuperclass(Class cls, Class newSuper) |
![]() | 3 tab 2012-09-10 16:43:38 +08:00 ![]() 没做过Mac开发,@Veelian 说的在iOS SDK下是正确的。但总的思路应该是继承WebView重写一个吧? |
![]() | 4 lldong 2012-09-10 17:07:45 +08:00 @Veelian 不过WebView不是继承自NSSCrollView吧,继承自NSView。 scroll view应该是在WebFrameView里面。 |
![]() | 6 jjgod 2012-09-10 18:32:14 +08:00 ![]() 可以替换 NSScrollView 的方法实现: http://lapcatsoftware.com/blog/2007/11/25/working-without-a-nib-part-6-working-without-a-xib/ |
7 ghawkgu 2012-09-10 18:48:30 +08:00 ![]() 关键词:isa swizzling 自己去搜吧 |
![]() | 8 lldong 2012-09-10 19:45:42 +08:00 WebView里面的那个scrollview是个NSScrollView的子类对象,如果要体换的话应该要用WebDynamicScrollBarsView的子类对象才对。 |
![]() | 9 chenluois OP 先感谢各位的回答!昨天按各位提供的思路折腾了一晚上,虽然没有成功,但至少可以慢慢试了,今天继续学习。 @Veelian 提供的思路我卡在 "写个WebView继承CLScrollView" 上了,WebView 继承自 NSView : NSResponder : NSObject,想了半天也没弄明白怎样才能 subclass 一个 WebView,并且让它继承 CLScrollView。Subclass 一个 WebView,它不只能是继承 WebView 么? @tab 关键问题就是,subclass 了一个 WebView 后,要重写哪个函数才能把 WebView 里面的 scrollView 的类替换为 CLScrollView 呢? @lldong @jjgod @ghawkgu 三位提供的思路,如果我没有理解错,你们说的是同一个东西,在运行时替换 NSScrollView 里面的某个方法。对运行时不了解,昨天看了几页 @lldong 分享的幻灯片,今天继续看。 http://lldong.github.com/blog/2012/03/05/objective-c-runtime/ |
![]() |
![]() | 11 lldong 2012-09-11 16:09:02 +08:00 ![]() @chenluois 可以直接看WebKit的源代码,这样就知道该往哪里下手了 https://svn.webkit.org/repository/webkit/trunk/Source/WebKit/mac/WebView/ |
![]() | 13 virushuo 2012-09-11 16:45:25 +08:00 @jjgod 如果我实现了一个苹果没公开的类中的一个方法的实现呢? 苹果不让用私有api的理由不就是他们随时会改动这些,但我现在问题是找到了一个他没实现的方法。虽然实际上我这么做没危险,因为就算苹果实现了也不会干扰我。 |
![]() | 14 lldong 2012-09-11 16:49:32 +08:00 ![]() @virushuo 试过method swizzling替换NavigationBar的drawRect方法,并不影响上架,但是也听过替换非私有API被查出来的,也听过因为方法名和某私有API一样被reject的,所以蛮好奇苹果的审查的方法。我觉得如果要保险的话各种方法名也要在运行时拼凑出来,甚至不要过objc_msgSend()去调用。 |
![]() | 16 nowa 2012-09-20 23:42:15 +08:00 @chenluois 我也遇到了同样的问题,感觉如果改动比较大的话用method swizzling太繁琐了。WebDynamicScrollBarsView没有公开,也无法继承。 不知最后采取了怎样的方案? |
19 clowwindy 2012-09-21 09:43:15 +08:00 试过 method swizzling,替换过 NSURLRequest 的方法,对 WebView 做一些 header 过滤。不影响上架。 |
![]() | 20 jerry 2012-09-21 09:50:15 +08:00 替换的目的是什么呢?如果是换滚动条,隐藏掉原来的,旁边再画一个 |