iPadとuipickerview(またはuidatepickerview)
-
02-10-2019 - |
質問
3.2 SDKでUipickerを使用して運が良かった人はいますか?私はiPhoneアプリケーションをiPadに移植する最中にいますが、それは私が仕事をすることができないように思われることの1つです。私はもう試した...
- アクションシートを作成し、ピッカーをサブビューとして追加して表示します。
- 上記のアクションシートを作成し、一般的なViewControllerのビューにし、そのVCをUIPopoverに追加します
- ピッカーだけのジェネリックViewControllerのビューを作成し、そのVCをuipopoverに追加します
アクションシートでは、描画しようともしません。ポップオーバービューでは、描画しようとしますが、正しくレンダリングされません。
誰かがこれを成し遂げたかどうかを確認したかっただけです。
みんな、ありがとう!
解決
私は上記のチュートリアルの著者です。ピッカーがポップオーバーで作業し、選択した値をメインビューのテキストボックスに追加するために、プロトコルを使用する必要があります。これを表示するためのサンプルプロジェクトを作成しました。これについては、すぐにチュートリアルを作成します。
他のヒント
私はこれに約24時間苦労し、このチュートリアルに従って、彼が彼のuitableviewに言及しているところならどこでも、あなたのuipickerviewについて考えて、適切な情報を置き換えるだけです。
マシュー・ケーシー - チュートリアル:iPadのコントロールをポップする概要
要するに、iPadでは、ピッカーを表示できる唯一の方法は、ポップオーバーコントロールの内側です。 Popoverのコンテンツビューコントローラー(Picker Viewのビューコントローラー)とメインアプリのビューコントローラー間でデータを共有することは、私が理解できなかったビットです。 (つまり、メインビューコントローラーのオブジェクトに影響を与えるピッカーの「DidSeLectrow」メソッド(UiteXtFieldまたはUIbuttonなど)を取得します。)これは、「DidSelectrow」メソッドをメインビューコントローラーに転送するためにカスタムプロトコルを作成することによって処理されます。
私は決してこのことの専門家ではないので、そのチュートリアルを一歩ずつ進めましたが、最終的にはうまくいきました。そのチュートリアルを見つける前に、私は迷子になりました。 (iPhoneアプリをiPadに移植しています。)
ビューコントローラー間でデータを共有したい場合...ソリューションはnsnotificationCenterです。
これは全体的に質問に答えないことを知っていますが、ビューコントローラー間でデータを共有したい場合:送信ビューコントローラーで
NSMutableDictionary *toshare = [[NSMutabledictionary alloc] init];
[toshare setValue:valueToShare forKey:@"shared"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"imSharing" withObject:nil userInfo:(NSDictionary *)toshare];
受信ビューコントローラーで:ViewDidLoadに配置します
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imSharing:) name:@"imSharing" object:nil];
次に、この関数を追加します。
-(void)imSharing:(NSNotification *)notification {
NSDictionary *dictionary = [notification userInfo];
//do something with [dictionary objectForKey:@"shared"];
dictionary = nil;
}
これは、2つのビューコントローラー間でデータを共有するために機能します...まあ、とにかく少量のデータ。
それ以外の場合は、詳細についてはこちらをご覧ください ビューコントローラー間でデータを共有します
インターフェイスビルダーを使用していますか? nibファイルを使用してXcodeに新しいUIViewControllerサブクラスを作成し、Uipickerをドラッグするのははるかに簡単です。次に、ビューコントローラーをポップオーバーに表示する必要があります。アクションシートはサブビューを持つように設計されていないため、それをしないでください。
私はそれをしました:3番目のスクリーンショットを参照してください C64ペイント.
みなさんの回答をありがとう。ですから、最初の問題が何であるかは言えませんが、問題をゼロから始めて、それを機能させました。まったく新しいビューコントローラーを作成し、ポップオーバーに表示しましたが、うまくいきました。ユニバーサルアプリを作成するためのより厳しいポイントの1つであるようです。
iPadで作成すると、uipickerviewが機能します。
UIPickerView* pickerView = [[UIPickerView alloc]initWithFrame: CGRectMake (someX, someY, 320, 216)];
他のいくつかのサイズは機能しているようです。しかし、CgrectzeroはiPadで動作しません - iPhoneで動作しますが。