J'ai créé une feuille d'action, mais le problème est que la méthode déléguée n'est pas appelée.
myActionSheet = UIActionSheet()
myActionSheet.addButtonWithTitle("Add event")
myActionSheet.addButtonWithTitle("close")
myActionSheet.cancelButtonIndex = 1
myActionSheet.showInView(self.view)
/// UIActionSheetDelegate
func actionSheet(myActionSheet: UIActionSheet!, clickedButtonAtIndex buttonIndex: Int){
if(myActionSheet.tag == 1){
if (buttonIndex == 0){
println("the index is 0")
}
}
}
J'ai utilisé une autre méthode qui fonctionnait bien avec iOS 8 mais ne fonctionnait pas avec iOS 7:
var ActionSheet = UIAlertController(title: "Add View", message: "", preferredStyle: UIAlertControllerStyle.ActionSheet)
ActionSheet.addAction(UIAlertAction(title: "Add event", style: UIAlertActionStyle.Default, handler:nil))
self.presentViewController(ActionSheet, animated: true, completion: nil)
Une idée pour résoudre le problème?
Vous ne définissez jamais le délégué de la fiche d'action:
myActionSheet = UIActionSheet()
myActionSheet.delegate = self
UIActionSheet en langue Swift: -
Feuille d'action avec cancelButton et destructiveButton
définissez le UIActionSheetDelegate.
let actionSheet = UIActionSheet(title: "ActionSheet", delegate: self, cancelButtonTitle: "Cancel", destructiveButtonTitle: "Done")
actionSheet.showInView(self.view)
Feuille d'action avec cancelButton, destructiveButton et otherButton
let actionSheet = UIActionSheet(title: "ActionSheet", delegate: self, cancelButtonTitle: "Cancel", destructiveButtonTitle: "Done", otherButtonTitles: "Yes", "No")
actionSheet.showInView(self.view)
créer la fonction Action sheet
func actionSheet(actionSheet: UIActionSheet!, clickedButtonAtIndex buttonIndex: Int)
{
switch buttonIndex{
case 0:
NSLog("Done");
break;
case 1:
NSLog("Cancel");
break;
case 2:
NSLog("Yes");
break;
case 3:
NSLog("No");
break;
default:
NSLog("Default");
break;
//Some code here..
}
UIActionSheet
est obsolète depuis iOS8, je vous recommanderais d'utiliser UIAlertController
si vous n'avez pas à supporter la version ci-dessous:
private func presentSettingsActionSheet() {
let settingsActionSheet: UIAlertController = UIAlertController(title:nil, message:nil, preferredStyle:UIAlertControllerStyle.ActionSheet)
settingsActionSheet.addAction(UIAlertAction(title:"Send Feedback", style:UIAlertActionStyle.Default, handler:{ action in
self.presentFeedbackForm()
}))
settingsActionSheet.addAction(UIAlertAction(title:"Tell Me a Joke!", style:UIAlertActionStyle.Default, handler:{ action in
self.presentRandomJoke()
}))
settingsActionSheet.addAction(UIAlertAction(title:"Cancel", style:UIAlertActionStyle.Cancel, handler:nil))
presentViewController(settingsActionSheet, animated:true, completion:nil)
}
Voici à quoi ça ressemble présenté:
Mise à jour pour Swift 3:
Si vous souhaitez afficher/ouvrir UIActionSheet lors d'un clic sur un bouton, utilisez ci-dessous un code simple et mis à jour dans votre ViewController:
// Définition de la méthode:
func showPaymentModeActionSheet() {
// 1
let optionMenu = UIAlertController(title: nil, message: "Choose Payment Mode", preferredStyle: .actionSheet)
// 2
let fullAction = UIAlertAction(title: "FULL", style: .default, handler: {
(alert: UIAlertAction!) -> Void in
self.mPaymentModeTextField.text = "FULL"
})
let addvanceAction = UIAlertAction(title: "ADVANCE", style: .default, handler: {
(alert: UIAlertAction!) -> Void in
self.mPaymentModeTextField.text = "ADVANCE"
})
//
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: {
(alert: UIAlertAction!) -> Void in
})
// 4
optionMenu.addAction(fullAction)
optionMenu.addAction(addvanceAction)
optionMenu.addAction(cancelAction)
// 5
self.present(optionMenu, animated: true, completion: nil)
}
// Appel de méthode:
@IBAction func actionOnPaymentModeButton(_ sender: Any) {
// open action sheet
showPaymentModeActionSheet()
}