前提・実現したいこと
[前提]
現状ピッカーとラベルは表示されていて
ラベルの初期表示は「Disney Character」
になっています。
[実現したいこと]
①UIPickerViewを初回起動時は非表示にして、
ラベルをタッチするとピッカーが出現
②ピッカーの操作した結果がラベルに表示
③Doneボタンの実装
④Doneボタン、または背景をタップするとピッカーが非表示
全ての質問に質問に答えなくても良いのですが、
一つでもわかる方がいればご教授いただきたいです。
発生している問題・エラーメッセージ
①実装ファイルに初回判定のコードを書いたのですが、 エラーコードなくビルドするものの普通に初回から表示されていまいます。 ②ピッカーをヘッダーファイルにIBAction接続したくても、 なぜかOutlet接続の表示しか出ないのでそもそも接続できません。 接続できたらこちらのサイトを参考にして表示非表示を実行しようかと考えています。 http://xyk.hatenablog.com/entry/2014/09/09/200927 http://xyk.hatenablog.com/entry/2014/10/02/105147 https://morizyun.github.io/blog/uitextfield-datepicker-delegate-sender/index.html ③検索してもswiftはいくつかみつかったのですが objective-cのコードは見当たらなかったです UItextに閉じるボタンをつけるのに応用できる…? https://a244.hateblo.jp/entry/2016/02/16/004545 ④Viewを追加してかぶせるという方法をするのか、 はたまた非表示にすることはできるのでしょうか? ①ができればできるような気がしますが、、
該当のソースコード
objective
1 2「ViewController.h」 3#import <UIKit/UIKit.h> 4 5@interface ViewController : UIViewController <UIPickerViewDataSource , UIPickerViewDelegate> 6 7//ラベルを定義 8@property (weak, nonatomic) IBOutlet UILabel *character; 9//ピッカーを定義 10@property ( weak , nonatomic ) IBOutlet UIPickerView *picker ; 11//ピッカーを操作した時のイベントを定義 12 13@end 14 15 16「ViewController.m」 17 18#import "ViewController.h" 19 20@interface ViewController ( ) { 21 NSArray * _pickerData ; 22} 23@end 24 25@implementation ViewController 26 27- (void)viewDidLoad { 28 [super viewDidLoad]; 29 _pickerData = @ [ @"MickeyMouse" , @"MinnieMouse" , @"DonaldDuck" , @"DaisyDuck" , @"Goofy" , @"Pluto" , @"Duffy", @"ShellieMay"] ; 30 31 self . picker . dataSource = self ; 32 self . picker . delegate = self ; 33 34 _character.text = @"Disney Character"; 35} 36 37// データの列数 38- ( int ) numberOfComponentsInPickerView : ( UIPickerView *) pickerView{ 39 return 1 ; 40} 41 42// データの行数 43- ( int ) pickerView : ( UIPickerView * ) pickerView numberOfRowsInComponent : ( NSInteger ) component{ 44 return _pickerData . count ; 45} 46 47// 渡された行とコンポーネント(列)に対して返されるデータ 48- ( NSString * ) pickerView : ( UIPickerView * ) pickerView titleForRow : ( NSInteger ) row forComponent : ( NSInteger ) component{ 49 return _pickerData [ row ] ; 50} 51 52//初回起動判定 53- (BOOL)isFirstRun 54{ 55 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 56 57 if ([userDefaults objectForKey:@"firstRunDate"]) { 58 // 日時が設定済みなら初回起動でない 59 return NO; 60 } 61 62 // 初回起動日時を設定 63 [userDefaults setObject:[NSDate date] forKey:@"firstRunDate"]; 64 65 // 保存 66 [userDefaults synchronize]; 67 68 // 初回起動 69 return YES; 70} 71 72- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 73 74 if ([self isFirstRun]) { 75 // 初回起動時の処理を書く 76 NSLog(@"初回起動"); 77 } 78 79 return YES; 80} 81 82 83@end 84
質問項目が多すぎます。もっと細分化して下さい。ちなみに②以外はUIPickerViewに関係のない質問です。
初回時起動時などが関係ないとなると、②も言ってしまえばラベルとAction接続の話なので関係ないというくくりになってしまうような気がします…。細分化するか迷ったのですが、関連した問題なので後で似たところでにつまずいた方が一度に関連した知識を得られると思い、また細分かするメリットもないと感じたのでまとめさせて頂いたのですが、細分化する場合のメリットをご教授頂けますでしょうか?
今のままだと全部の回答を用意できないと出来ないです。細分化されていれば一つ一つ(分かるものだけ)に回答できます。(質問者にとってはこれ以上無いメリットだと思いますが)
ほとんどがUIPickerViewに関係のない質問なのに、タイトルが「UIPickerViewで〜」というのは不適切です。
細分かに関しては確かにおっしゃる通りですね!タイトルに関してはすべて「UIPickerViewで〜」を抜いたら回答するコードが変わってくるかと思いますが、それは質問内容ではなく実現したい内容にかけば良いってことですかね。しかし自分的には以下のようになると言葉足らずな気もします「①初回起動時は非表示にして、 ラベルをタッチするとピッカーが出現 ③Doneボタンの実装 ④Doneボタン、または背景をタップするとピッカーが非表示」例えば①や④の場合UIPickerViewが〜が抜けてるとキーボードの場合もあったりしますので入れるべきかなとは思いました。
①や④はView一般の話です。仮に、UIViewでうまくいくけどUIPickerViewでうまくいかないのであれば、UIPickerViewと書く必要はあります。
Doneボタンにしても、どこに表示するのか?pickerにくっつけるのか?「swiftはいくつかみつかった」のであれば、そのURLをなぜ書かないのか?など、ツッコミどころ満載です。
今、Objective-Cを使うのであれば、Swift→Objective-Cの変換くらいは出来ないといけません。(ほとんどの場合、メソッド名が少し違うだけなので、それほど難しくないです)
書き方の件で全部の回答ができない人の為に細分化するというのはわかりました。以後そうします!しかし関連する問題を後から見た人が解決しやすいというメリットについてどう思いますか?Doneは希望の箇所に表示できるかとか最初非表示なのにくっつけない事も可能ということを理解していませんでした。「SwiftのURLを載せたらそこから変換していただける」という考えがなかったので載せませんでした。同時進行で勉強していったほうが間違いないとは思うのですが、その時間がないのでObj-cを集中的にやっています。色々とアドバイスありがとうございます!!それと勘違いされてるようですが最初から丸投げしているわけではなく自分で調べた上でつまずいているので質問しています。
回答1件
あなたの回答
tips
プレビュー