0

tableViewCellのコンテンツビューを作成するとき、必要なのはテキストを配置することだけだったので、drawRect:withFont、drawAtPoint...などをdrawRect内で使用しました。結局のところ、描画されるテキストの一部はクリック可能なURLである必要があります。そこで、UIWebViewを作成して、drawRectに挿入することにしました。すべてがうまくレイアウトされているようですが、問題はUIWebViewとの相互作用が発生していないことです。インタラクションを有効にしてみましたが、機能しませんでした。drawRectを使用して現在のグラフィックスコンテキストに描画しているので、知りたいのですが、サブビューをユーザーと対話させるためにできることはありますか?
UITableViewCellクラス内で使用するコードの一部を次に示します。

-(void) drawRect:(CGRect)rect{  
    NSString *comment = @"something";
    [comment drawAtPoint:point forWidth:195 withFont:someFont lineBreakMode:UILineBreakModeMiddleTruncation];

    NSString *anotherCommentWithURL = @"this comment has a URL http://twtr.us";
    UIWebView *webView = [[UIWebView alloc] initWithFrame:someFrame];
    webView.delegate = self;
    webView.text = anotherCommentWithURL;
    [self addSubView:webView];
    [webView release];
}

私が言ったように、ビューはうまく描画されますが、外部からのwebViewとの相互作用はありません。URLはHTMLに埋め込まれ、クリック可能である必要があります。そうではない。私はそれを別のビューで動作させましたが、そのビューにビューを配置しました。何か案は?

4

2 に答える 2

6

新しいものを作成して、呼び出しごとにサブビューとして追加することは望ましくありませ。これは非常に悪い考えです。UIWebViewdrawRect:

  1. 遅くなるでしょう。それらは重いオブジェクトであり、何千ものオブジェクトを作成しています。
  2. UIWebView古いオブジェクトを取り除くことはできません。つまり、基本的に何千ものそれらを互いに重ね合わせているのです。

おそらく初期化子で、または一度だけ呼び出される他のメソッドで、UIWebView onceを作成する必要があります。また、サブビューとして1回だけ追加する必要があります。

それらのビューを何千も作成するという行為は、確かに問題を引き起こしている可能性があります。

ビューが位置/サイズを変更している場合はsetFrame:、スーパークラスのメソッドを呼び出すことに加えてUIWebView、インスタンス変数として確実に維持したいのフレームを微調整することができます。

于 2011-01-11T18:49:52.647 に答える
1

これは間違っています。-drawRect内でUIWebViewをインスタンス化するべきではありません:-これは、画面を更新するために繰り返し呼び出される可能性があります。

代わりに、少なくともUITableViewCellのサブクラスを作成し、それにUIWebViewを追加して、すべてのテキストを保持する必要があります。

それでも、UIWebViewはおそらく重すぎて、各セルに配置できません。

あなたはこれをチェックしたいかもしれません。

于 2011-01-11T18:51:20.470 に答える