【swift】ひとつのViewControllerでふたつのActionSheetを使う【CoffeeNote開発日記】

ひとつのViewControllerでふたつActionSheetを使う場合は,tagでひもづける必要がある.

actionSheetメソッドが勝手に呼ばれるんだけど,それがそれぞれのUIActionSheetと結びつけることができないみたい.なんだこれ.

自分の場合は,同じViewControllerに写真を登録するときにカメラで撮るかカメラロールから登録するか選ぶためのActionSheetと,あと削除を確認するためのActionSheetのふたつが必要だった.

ということでソースコードは以下の感じになった.

  @IBAction func pushCameraButton(sender: AnyObject) {
    var sheetCamera = UIActionSheet()
    sheetCamera.title = "Set Photo of Coffee"
    sheetCamera.delegate = self
    sheetCamera.addButtonWithTitle("Take Photo by Camera")
    sheetCamera.addButtonWithTitle("Select Photo from Cameraroll")
    sheetCamera.addButtonWithTitle("Cancel")
    sheetCamera.cancelButtonIndex = 2
    
    sheetCamera.tag = 0
    
    sheetCamera.showInView(self.view)
  }
  
  
  @IBAction func pushedDeleteButton(sender: AnyObject) {
    var sheet = UIActionSheet()
    sheet.title = "Deleting This Note"
    sheet.delegate = self
    sheet.addButtonWithTitle("OK")
    sheet.addButtonWithTitle("Cancel")
    sheet.cancelButtonIndex = 1
    
    sheet.tag = 1
    
    sheet.showInView(self.view)
  }
  
  
  func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
    switch (actionSheet.tag) {
    case 0:
      /* Photo ActionSheet */
      if (buttonIndex==0) {
        // take photo
        self.takePhoto(self)
      }else if(buttonIndex==1) {
        // select photo
        self.selectPhoto(self)
      }else {
        // cancel
      }
      break
    case 1:
      /* Delete ActionSheet */
      if (buttonIndex==0) {
        self.takePhoto(self)
      }else if(buttonIndex==1){
        self.selectPhoto(self)
      }else {
        // Cancel Button
      }
      
      if (buttonIndex==1) {
        // Cancel Button
        println("Cancel button tapped.")
      }else{
        // OK Button
        println("OK button tapped.")
        
        /* Delete Note */
        
       self.performSegueWithIdentifier("unwindFromEditByDeleteButton", sender: self)
        
        break
      }
    default:
      break
    }
    
  }