2

私は自分のアプリで何をしようとしているのかを述べることから質問を始めます:

iPadのPagesやNumbersに似た、次のようなドキュメントの「ピッカー」画面を作成しようとしています。

ここに画像の説明を入力してください

UIScrollViewサブビューをドロップするものが欲しいのですが。これらのサブビューには、ページ/番号の日付/名前の「並べ替え」セグメント化コントロールなどのコントロールが含まれている場合や、ドキュメントの画像である場合があります。サブビューが何を表示するかは実際には重要ではありません。サブビューがバッキング付きのビューであることが必要UIViewControllersです。これが私の混乱の始まりです。

ほら、私はもともと、を使用してドキュメントピッカー画面を作成しようとしましたUITableView。この質問の範囲を超えたさまざまな理由で、それはうまくいきませんでした。その取り組みの一環として、このチュートリアル(iOS 4でのカスタムUITableViewCellの作成UITableViewCell)に従って、サブクラス(および付随するXIB)を作成しました。私は自分自身に思いました、これは素晴らしいです-私はで表示できるビューを持っており、このような方法でそれらのビューからイベントを取得する方法があります(日付/名前のセグメント化されたコントロールの選択の変更に応答します) :UITableViewsortTypeChanged

@interface DocSortViewController : UITableViewCell {
}

-(IBAction)sortTypeChanged:(id)sender;
@end

これはすべて順調で良かった-UITableView私が望むものを手に入れることができないことに気付くまで。だから私はそれを放棄し、に賛成したUIScrollVIew。しかし、これは私の現在の知識が私を失敗させるところです。カスタムの「ビューコントローラ/XIBビューを使用する」パラダイムは、UITableViewCellsでは機能しないようですUIScrollViews

にロードして表示できる別のViewControllerとそれに付随するXIBを作成する方法がわかりませんUIScrollView。を介してXIBをロードし、サブビューとしてUINib.instantiateWithOwnerビューコントローラのviewプロパティを追加しようとするとクラッシュします。理由はわかりません。

しかし、私が心配しているのは、ビューコントローラ/ビューがどのように機能するかを根本的に誤解しているように見えることです。特にと組み合わせるとUIScrollViews

私は何が欠けていますか?誰かがこれに似た何かをしようとしたことがありますか?このための推奨されるベストプラクティスはありますか?ビューコントローラ/XIBをにロードすることになっていない場合UIScrollViews、次に何をする必要がありますか?にあるサブビューのコントロールからイベントをどのように取得しますUIScrollViewか?

編集:私の問題のその部分を追加する必要があります。これは、WPFのレンズを通して見ているということです。ここでは、MVVMパターンを使用して、それぞれが独自のバッキングを持つ小さなビューで構成することにより、完全なビューを構築します。モデルを表示します。iOSでそれを複製するのは現実的ですか?それとも本当にお勧めではありませんか?

4

1 に答える 1

2

iOSでは、「ビューコントローラー」は、通常、画面全体に相当するサブビューを制御する特別なエンティティです(iPadのUISplitViewControllerとUIPopoverControllerは例外です)。リンクするチュートリアルは、UITableViewCellsのビューコントローラーxibを作成するように指示するのが間違っています。実行する必要があるのは、UITableViewCellサブクラスのxibを作成することであり、ビューコントローラーは関与しません。ただし、残りの部分は一見正しいように見えます。

UIScrollViewでもほぼ同じことができますがtableView:cellForRowAtIndexPath:、xibからサブビューを作成するタイミングを通知する便利なメソッドがない点が異なります。投稿しないと、「クラッシュ」したときに発生する実際のエラーを推測することしかできinstantiateWithOwner:options:ませんが、所有者として提供しているオブジェクトは、nibが期待するものと一致しないと思います。所有者として渡すオブジェクトは、nibで所有者が指定されているクラスのインスタンスである必要があります。

于 2011-08-22T16:43:55.397 に答える