0

UITableViewDelegateとUIScrollViewDelegateから継承するUIViewController(VCという名前)があります。以前のUIViewControllerは、次のようにVCをロードします。

[self.view addSubview:VC.view];

これは、viewWillAppearが起動しないことを意味します。上記の行の直後にそのメソッドを追加できます。

[VC viewWillAppear];

ただし、cellForRowAtIndexPathの前に起動するため、スクロールしようとするとテーブルビュー参照が空になります。

VCのロード時にテーブルの特定の行にスクロールしたいと思います。しかし、テーブルビューのcellForRowAtIndexPathがいつ完了したか(viewWillAppearがない)がわからないため、スクロールコードを配置する場所がありません。私はすでにテーブルビューへの参照を保持しており、それをスクロールに使用できます。しかし、スクロールコードはどこに配置できますか?

4

2 に答える 2

0

UIViewController は、「継承」ではなく、UITableViewDelegate および UIScrollViewDelegate プロトコルに準拠しているということですか?

親View Controllerから [VC viewWillAppear:] を直接呼び出すことができます。VC によって処理されるビューが常に別のビュー コントローラーのビューのサブビューである場合、UITableView をサポートするために完全な UIViewController インスタンスが本当に必要ですか? テーブルビューにデリゲートとデータソースの実装を提供するだけです。

次に、(Interface Builder でオブジェクトを追加することにより) テーブル ビューを定義する NIB で、または現在 VC の親であるビュー コントローラーの viewDidLoad メソッドで、デリゲートとデータソースをインスタンス化できます。

于 2009-06-18T14:59:34.503 に答える
0


確かに、新しいView Controllerのビューが追加されて表示されると、viewWillAppearではなくviewDidAppearが呼び出されます。そこにスクロールコードを貼り付けます。

それでもうまくいかない場合は、init メソッドの遅延を試してください。このようなもの:

[self performSelector:@selector(myScrollingFunction) withObject:nil afterDelay:2.0];

View Controllerのビューが常に同じ時間後に表示されるとは限りませんが、遅延時間をいじって、適切なものを取得できます。

于 2009-11-28T06:21:52.943 に答える