絶対に挫折しないiPhoneアプリ開発入門Part.23 ~Storyboardでアクションシート&配列処理~
前回:絶対に挫折しないiPhoneアプリ開発入門Part.22 ~UIDatePickerで日付や時刻を表示しよう~
こんな感じですね。
「注意」を押したらラベルに「注意」、「処理1」を押したらラベルに「処理1」、「処理2」を押したらラベルに「処理2」と表示するようにします。ラベルに文字を表示させるのは、アクションシートのボタン処理がどうなっているか明確にするためです。
ではまずSingleViewApplicationからスタートし、Storyboardを使いましょう。プロジェクトの名前は「ActionSheet」としてみました。
設置したボタンとラベルをファイルに紐付けします。右クリックを押しながらドラッグですね。controlキーを押しながらでもOKです。ボタンのほうは、直接ダブルクリックをして「アクションシートを出す」とあらかじめ文字をいれておきました。そしてボタンを押したらアクションシートが出る仕組みにするので、ファイルに紐付けした際には「Action」を選択してくださいね。「Outlet」じゃないですよ〜。一方、ラベルのほうは文字を表示するだけなので「Outlet」、名前は「label」としてみました。そのまんまな感じです。
これで準備はできました。処理を書いていきましょう。
UIActionSheetを使うときには、hファイルで
ViewController.h
#import <UIKit/UIKit.h> @interface ViewController : UIViewController <UIActionSheetDelegate> //←これを追加してください - (IBAction)tap:(id)sender; @property (strong, nonatomic) IBOutlet UILabel *label; @end
では、mファイルを実装しましょう。(丸で囲んだ数字は文字化けしてしまうので、普通に「1」「2」と記述しました。戸惑わないでください)
まずはIBActionの処理を書きましょう。
ViewController.m
- (IBAction)tap:(id)sender { UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"アクションシートが出ました" delegate:self cancelButtonTitle:@"キャンセル" destructiveButtonTitle:@"注意" otherButtonTitles:@"処理1",@"処理2", nil]; [actionSheet showInView:self.view]; }
- タイトル:initWithTitle
- キャンセルボタン:cancelButtonTitle
- 「要注意」してほしい赤いボタン:destructiveButtonTitle
- その他の普通のボタン:otherButtonTitles
なんとなく見れば分かると思います。
otherButtonTitlesでボタンを増やすためには、たとえば「otherButtonTitles:@"処理1",@"処理2", @"処理3",nil」とします。nilを忘れないようにしてください。
アクションシートをつくっただけでは表示させることができません。
上記のように[actionSheet showInView:self.view]によって表示させてくださいね。
次に、「注意」と書かれたアクションシートのボタンなどが押された時、どういう処理をするのかを書いていきます。
これにはメソッド- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndexを追加する必要があります。あらかじめテンプレートにはのっていないので、自分で書いてつくる必要があります。IBActionの下の方にでも記述してください。
- (IBAction)tap:(id)sender { UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"アクションシートが出ました" delegate:self cancelButtonTitle:@"キャンセル" destructiveButtonTitle:@"注意" otherButtonTitles:@"処理①",@"処理②", nil]; [actionSheet showInView:self.view]; } - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ //←この処理を追加 NSArray *array = [[NSArray alloc] initWithObjects:@"注意",@"処理1",@"処理2", nil]; for (int i = 0; i < [array count]; i++) { if (buttonIndex == i) { label.text = [array objectAtIndex:i]; } } }
キャンセルボタンをのぞき、今回はボタンが3つあります。
- 0番目:「注意」
- 1番目:「処理1」
- 2番目:「処理2」
となります。上から順番です。これが「buttonIndex」ですね。
ラベルには同じ文字を表示させようと思うのでarrayという配列を作成し、文字列を3つ格納してみました。
たとえば、buttonIndex == 0 のときには「注意」とラベルに表示してもらいたいということですね。
配列の要素にアクセスするようにコードを書いてみました。
forループさせて、いつまでforループさせるかというと、配列の要素がつきるまでです。
配列の要素数を整数で返してくれるのがcountです。今回は[array count]でarrayという配列の要素数、すなわち「3」を返してくれるわけです。
配列の要素にアクセスし、その要素を返してくれるのが[array objectAtIndex:i]です。
たとえば[array objectAtIndex:0]の場合、arrayの0番目にアクセスしているので、「注意」という文字列を返します。
以上がコードの説明です。
できましたでしょうか?
======================
当ブログ管理人のツイッターはこちら
◎フォローしてくださると泣いて喜びます!ツイッター上で当ブログの質問などにもできるだけお答えしますし、役に立つiPhoneアプリ開発情報もつぶやきます。個人的なご依頼(たとえば、プログラミングの家庭教師、Skypeレッスンをしてくれないか、iPhoneアプリ開発の勉強会ってやってるの、とかですね)でもかまいません。
■スカイプレッスンについて
開発をしているとその都度ぶつかる問題があると思いますが、検索で調べてもなかなかわからない、あるいは調べても非常に時間がかかる場合があると思います。開発者のみなさんもお忙しいと思いますので、私のレッスンを受けながら開発を進めていただけると、大幅にお時間を短縮できます。加えて、iPhoneアプリ開発の基礎、応用が身につき、今後の開発もスムーズに進められます。
お問い合わせはツイッター、またはhiyoshimarukoアットマークgmail.comまでお願いします。(アットマークを@にしてください)お待ちしております!