1

私はUIPickerView主に学習目的でカスタム置換クラスを構築しようとしていますが、開発中のアプリケーション内にこれを実装することを目的としています。私は自分のアプリケーションのUIに多くの時間と労力を費やしてきましたが、今ではデフォルトUIPickerViewが適切に適合していません。

私はこのドリブルUIPickerViewが本当に滑らかに見える日付/時刻ピッカーのモックアップを見ましたが、大きなハッキングなしでこれを大幅にカスタマイズできる地獄のチャンスはないことに気づきました。

たくさんの読書と調査の結果、私が最初に想定したようなプレーンではなく、コンポーネントにsをUIPickerView使用していることがわかりました。これは2つの理由で混乱します:UITableViewUIScrollView

sのカスタマイズUITableViewCellは、derriereの大きな問題です。それは大変な作業ではなく、面倒で、必要な結果が得られることはめったにありません。オーバーヘッドはほとんどありませんが、どういうわけかUIPickerViewこれをうまくやってのけることができます。コンポーネントの各行は、そのUITableViewCellStyleDefaultためのカスタムビューで使用するだけcontentViewだと思いますが、仮定について彼らが何を言っているかはご存知でしょう。

私を失望させている2番目のことは、プロトコルにUIPickerView準拠しているが、UITableViewDataSourceプロトコルには準拠していないことUITableViewDelegateです。デリゲートが正しい高さを提供する責任があるため、これは少し奇妙に思え– tableView:heightForRowAtIndexPath: UIPickerViewますが、コンポーネントのサイズを設定することはできます– pickerView:rowHeightForComponent:

これに沿って、テーブルビューを利用することも奇妙な選択のように思われます。これらは、スクロールビューのように、指定された行にネイティブに「スナップ」しないためpagingEnabledです。

UIPickerViewデフォルトが前述のデリゲートに準拠していない理由を誰かが説明できますか?UIScrollView代わりにカスタムピッカーを実装する方が簡単ですか、それともUITableView必要な機能を提供する必要がありますか?

4

3 に答える 3

3
  1. UIPickerView実際にはUITableViewDelegateプロトコルに準拠していますが、パブリックヘッダーでそれを公開していません。関数を使って自分で確認できclass_copyProtocolListます。

  2. UITableViewを内部的に使用すると、UITableViewがセルの再利用を強力にサポートするため、大量の行を含むピッカーの実装がはるかに簡単になります。そうしないと、Appleはピッカーに対してそのロジックをもう一度再実装する必要があります。この場合のUITableViewCellのカスタマイズに大きな問題があるため、コメントするのは難しいです)

  3. UITableViewはUIScrollViewサブクラスであるため、特定の位置に「スナップ」させることができます。その目的に正確に使用できるプロトコルのscrollViewWillEndDragging:withVelocity:targetContentOffset:メソッドを確認してください。UIScrollViewDelegate

于 2013-03-27T09:49:17.023 に答える
0

カスタムは、フィールドに必要な数のサブクラスをUIPickerView使用してその動作を模倣することによって行われます。UIViewControllerUITableView

例:タイムピッカーが必要な場合は、2つのテーブルビューを使用します

画像などを使用して、xibでスタイルを設定する必要があります。

動作を再現するのが難しいのはUIPickerView、最も近いセルに「スナップ」する部分であり、特にそれを正しくすることです

また、aのセルUIPickerViewは単純で、セル間に境界線/区切り文字がなく、テキストラベルが中央に配置され、voilàです。表示されるのは、sの前にオーバーレイされた画像だけですUITableView

に完全に準拠していない理由についてはUITableViewDelegate、実際には、UITableView内部で使用される自動的にスナップする軽量であるためUIPickerViewです。したがって、これに特に有用ではない一部の代理人が不足しています。

しかし、私たち全員が1つのことに同意していると思います。確かに、カスタムの構築UIPickerViewは大きな苦痛であり、より簡単なはずです。

このコンポーネントを見てください。私自身はテストしていませんが、非常に見栄えがします。computerlogicx / AFPickerView

于 2013-03-27T10:00:52.960 に答える
0

UIPickerを拡張することで、なんとか「代替」を実装できましたUICollectionView

通常、1つのセクションに複数のアイテムがUICollectionViewある場合に使用されますが、1つのアイテムだけを含めることができ、正常に機能します。ページングを有効にすると、と同様の動作が得られますがUIPicker、一度に1つのアイテムしかスクロールできない「スティッキー」スクロールがあり、それが必要な場合はより良い場合があります。さらに、垂直方向または水平方向にスクロールできます。追加のコードを使用して2Dピッカーを使用することもできます。

于 2016-04-05T19:50:45.440 に答える