1
Veelian 2012-09-10 15:54:59 +08:00 1
**WebView 内含的 NSScrollView** 不是这样的,WebView是继承自NSScrollView,而不是内含的NSScrollView,你可以写个WebView继承CLScrollView,实现NSWebViewDelegate方法
|
2
lldong 2012-09-10 16:26:35 +08:00 1
或许可以用这个运行时API
Class class_setSuperclass(Class cls, Class newSuper) |
3
tab 2012-09-10 16:43:38 +08:00 1
没做过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 1
可以替换 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 1
关键词: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/ |
10
virushuo 2012-09-11 16:07:38 +08:00
|
11
lldong 2012-09-11 16:09:02 +08:00 1
@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 1
@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
替换的目的是什么呢?如果是换滚动条,隐藏掉原来的,旁边再画一个
|