2

UIWebView のスクロールを無効にしようとしていますが、見つけた唯一の方法はこの方法を使用することです:

#import <objc/runtime.h>

id scroller = [[Webview subviews] lastObject];
int count;
Method *method = class_copyMethodList([scroller class], &count);
int i;
for (i=0; i<count; i++) {
    if (strcmp(method_getName(method[i]), "setScrollingEnabled:") == 0)
        break;
}
IMP test = method_getImplementation(method[i]);
test(scroller, @selector(setScrollingEnabled:), NO);

これは iPhone SDK の違法な使用方法と見なされますか? これにより、App Store への申請が拒否される可能性はありますか?

4

7 に答える 7

4

これを行う方がはるかに簡単ではないでしょうか:

if ([scroller respondsToSelector: @selector(setScrollingEnabled:)]) [scroller setScrollingEnabled: NO]

これにより、バイナリをスキャンする可能性のある潜在的なメソッド呼び出しが回避されます (「合法性」をどのように検証するかは不明です)。まだ 100% コーシャではありませんが、より安全であることは間違いありません。

于 2009-09-07T10:45:34.037 に答える
2

setScrollingEnabled を使用したためにアプリが拒否されたので、注意してください。

彼らのメッセージ: 「アプリケーションに含まれる非公開 API は setScrollingEnabled です」

于 2010-05-19T17:11:48.167 に答える
2

メソッドが .h ファイルにない場合、それは非公開です。とてもシンプルなルールです。単純なメッセージを送信するためにランタイムの「シェナニガン」を実行する必要があるという事実は、伝えるべきです。

于 2010-05-19T17:17:09.917 に答える
1

これは機能します– </ p>

UIScrollView *scrollView = [[myWebView subviews] lastObject];
scrollView.scrollEnabled = FALSE;

これにより、問題が修正されますが、リンクはクリック可能であり、スクロール可能に埋め込まれているscrollViewはすべて、パブリックAPIのみを使用します。

私は、javascriptソリューションがWebViewに埋め込まれている場合、WebViewが正しく機能しないことを発見し、 falseUIScrollViewに設定userInteractionEnabledすると、WebView内のリンクがクリック可能になるのを防ぎました。

于 2010-06-23T17:44:21.630 に答える
1

はい、これは違法と見なされます。setSCrollingEnabled がプライベート フレームワークの一部であるという「警告」を実際に受け取りました。彼らはアプリを承認しましたが、提出する次の更新のためにこの呼び出しを削除する必要があると言われました.

于 2010-01-06T04:29:59.650 に答える
0

おそらく彼らは、オフスクリーンUIWebViewのコンテンツを取得してプレーンなUIIMageビューに表示したり、ページのHTMLコンテンツを取得してサイズを制限し、UIWebViewでレンダリングしたりするなど、別の方法で行ったと考えているかもしれません。

于 2009-09-07T07:48:29.337 に答える
0

疑わしいかもしれませんが、メソッドが見つからない場合のフォールバック動作がある限り、拒否の原因にはなりません。過ぎ去ったより悪い虐待があります。

于 2009-09-07T07:13:37.050 に答える