読者です 読者をやめる 読者になる 読者になる

使って創ってApp

ソフトウェアを使ったり作ったりするブログです

iOSアプリ開発でUIAlertControllerを使ってアクションシートを作成する

iOSアプリ開発でUIAlertControllerを使ってアクションシートを作成するメモです。

アラートを作成する方法とほとんど同じです。アラートの作成方法は iOSアプリ開発でアラートを表示する - 使って創ってApp に書いてあります。

開発環境

完成予定図

f:id:hitxutokun:20160120001910p:plain

アクションシートを作成する

Show ActionSheet ボタンをタップすると、アクションシートが表示されます。アクションシートには Editボタン Deleteボタン Cancelボタンがあります。

アクションシートを表示する時にコンソールに Show ActionSheet と表示し、Edit をタップしたら Pressed Edit 、 Delete をタップしたら Pressed Delete 、Cancel をタップしたら Pressed Cancel とコンソールに表示します。

アクションシートを表示する

UIAlertViewController クラスのインスタンスと、アクションシートに表示させるボタンの数だけ UIAlertAction クラスのインスタンスを作成します。作成した action を UIAlertViewController クラスのインスタンスに登録します。

  1. UIAlertViewController クラスのインスタンスを作成
    let actionsheet = UIAlertController(title: "ActionSheet", message: "This is ActionSheet!", preferredStyle: .ActionSheet)
  2. UIAlertAction クラスのインスタンスを作成
    let action_edit = UIAlertAction(title: "Edit", style: .Default) { (action) -> Void in
      print("Edit Pressed")
    }
    let action_delete = UIAlertAction(title: "Delete", style: .Destructive) { (action) -> Void in
      print("Delete Pressed")
    }
    let action_cancel = UIAlertAction(title: "Cancel", style: .Cancel) { (action) -> Void in
      print("Cancel Pressed")
    }

    アクションシートのボタンがタップされた時に起こす処理を、クロージャに書けます。今回はコンソールに文字を表示させます。

  3. action を actionsheet に追加する
    [action_edit, action_cancel, action_delete].forEach { (action) -> () in
    alert.addAction(action)
    }
  4. actionsheet を表示する
    self.presentViewController(actionsheet, animated: true) { () -> Void in
      print("ActionSheet Shown!")
    }

    UIViewController クラスの presentViewController メソッドで actionsheet を表示させます。クロージャに書いた処理は、アクションシートが表示された時に実行されます。

おわりに

以上のコードを実行すると、アクションシートが表示されます。完成予定図のアプリでは、Show ActionSheetボタンをタップするとアクションシートを表示するようにしています。

action を actionseet に追加した順番は

  1. action_edit
  2. action_cancel
  3. action_delete

でしたが、表示順は

  1. action_edit
  2. action_delete
  3. action_cancel

でした。

UIAlertActionStyle を Cancel に指定した action は一番下に表示されるようですね。