J'ai la méthode d'alerte suivante.
static func notifyUser(_ title: String, message: String) -> Void
{
let alert = UIAlertController(title: title,
message: message,
preferredStyle: UIAlertControllerStyle.alert)
let cancelAction = UIAlertAction(title: "OK",
style: .cancel, handler: nil)
alert.addAction(cancelAction)
self.presentViewController(alert, animated: true, completion: nil)
}
Je reçois une erreur en disant qu'il y a un argument supplémentaire animated
dans la méthode presentViewController
, mais lorsque je le retire, il ne rejette toujours pas l'erreur et on me dit ensuite que completion
est un argument supplémentaire.
presentViewController
est modifié dans Swift 3 comme ceci.
present(alert, animated: true)
Consultez Documentation Apple pour plus de détails.
De Swift 3, completion
est facultatif, donc si vous ne voulez pas gérer le bloc d'achèvement, vous n'avez pas besoin d'écrire nil
et si vous souhaitez gérer le bloc d'achèvement, écrivez comme ceci.
self.present(alert, animated: true) {
}
Remarque: Votre méthode notifyUser est déclarée avec static
. Vous ne pouvez donc pas utiliser self
avec elle. Supprimez-la également pour supprimer l'erreur suivante que vous obtenez après avoir corrigé celle-ci.
let actionSheetController: UIAlertController = UIAlertController(title: "Action Sheet", message: "Swiftly Now! Choose an option!", preferredStyle: .alert)
let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .cancel) { action -> Void in
//Just dismiss the action sheet
}
actionSheetController.addAction(cancelAction)
self.present(actionSheetController, animated: true, completion: nil)
Swift 3
let alertView = UIAlertController(title: "", message: "your message", preferredStyle: .alert)
let action = UIAlertAction(title: "OK", style: .default, handler: { (alert) in
})
alertView.addAction(action)
self.present(alertView, animated: true, completion: nil)
Vous essayez d'utiliser self dans une méthode statique, alors que self devrait être l'instance actuelle de cette classe, mais static ne peut pas utiliser self.
Sans gestionnaire d'actions pour le bouton d'alerte
En Obj-C
+(void) notifyUser:(NSString *)title withMessage:(NSString *)message onViewController:(UIViewController *)vc {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *action = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:nil];
[alert addAction:action];
//vc will be the view controller on which you will present your alert as you cannot use self because this method is static.
[vc presentViewController:alert animated:true completion:nil];
}
Dans Swift 3.0
static func notifyUser(_ title: String, message: String, vc: UIViewController) -> Void
{
let alert = UIAlertController(title: title,
message: message,
preferredStyle: UIAlertControllerStyle.alert)
let cancelAction = UIAlertAction(title: "OK",
style: .cancel, handler: nil)
alert.addAction(cancelAction)
//vc will be the view controller on which you will present your alert as you cannot use self because this method is static.
vc.present(alert, animated: true, completion: nil)
}
Avec gestionnaire d'action pour le bouton d'alerte
En Obj-C
+(void) notifyUser:(NSString *)title withMessage:(NSString *)message withButtonTitles:(NSArray<NSString *> *)buttonTitles andButtonStyles:(NSArray *)styles onViewController:(UIViewController *)vc onCompletion:(void (^)(NSInteger))completion {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
for (NSString *title in buttonTitles) {
UIAlertActionStyle style = [[styles objectAtIndex:[buttonTitles indexOfObject:title]] intValue];
UIAlertAction *actionObj = [UIAlertAction actionWithTitle:title style:style handler:^(UIAlertAction *action){
NSInteger index = [buttonTitles indexOfObject:action.title];
completion(index);
}];
[alert addAction:actionObj];
}
//vc will be the view controller on which you will present your alert as you cannot use self because this method is static.
[vc presentViewController:alert animated:true completion:nil];
}
Invoquez la méthode d'instance ci-dessus comme ceci.
[ClassName notifyUser:@"Title For Alert" withMessage:@"Message for Alert" withButtonTitles:@[@"Camera",@"Library",@"Dismiss"] andButtonStyles:@[@(UIAlertActionStyleDefault),@(UIAlertActionStyleDefault),@(UIAlertActionStyleCancel)] onViewController:yourViewController onCompletion:^(NSInteger indexOfTappedButton){
//Note the index of the button will have the same order as you have provide the titles array in this method
}];
Ici
yourViewController
est le contrôleur sur lequel vous allez présenter cette alerte
Dans Swift 3.0
extension UIAlertController {
static func notifyUser(_ title: String, message: String, alertButtonTitles: [String], alertButtonStyles: [UIAlertActionStyle], vc: UIViewController, completion: @escaping (Int)->Void) -> Void
{
let alert = UIAlertController(title: title,
message: message,
preferredStyle: UIAlertControllerStyle.alert)
for title in alertButtonTitles {
let actionObj = UIAlertAction(title: title,
style: alertButtonStyles[alertButtonTitles.index(of: title)!], handler: { action in
completion(alertButtonTitles.index(of: action.title!)!)
})
alert.addAction(actionObj)
}
//vc will be the view controller on which you will present your alert as you cannot use self because this method is static.
vc.present(alert, animated: true, completion: nil)
}
}
Invoquez la méthode statique ci-dessus comme celle-ci.
UIAlertController.notifyUser("Title for Alert", message: "Message show in Alert", alertButtonTitles: ["Camera", "Library","Dismiss"], alertButtonStyles: [.default,.default,.cancel], vc: yourViewController, completion: { indexOfTappedButton in
//Note the index of the button will have the same order as you have provide the titles array in this method
})
Ici
yourViewController
est le contrôleur sur lequel vous allez présenter cette alerte
Swift 3 Try Custom Action Annuler
let uiAlertController = UIAlertController(// create new instance alert controller
title: "You TITLE text",
message: "You Message text",
preferredStyle:.alert)
uiAlertController.addAction(// add Custom action on Event is Cancel
UIAlertAction.init(title: "Cancel", style: .default, handler: { (UIAlertAction) in
//TO DO code
uiAlertController.dismiss(animated: true, completion: nil)//dismiss show You alert, on click is Cancel
}))
//show You alert
self.present(uiAlertController, animated: true, completion: nil)
let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
if action {
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: {
(action : UIAlertAction!) in self.navigationController?.popViewController(animated: true)
}))
} else {
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
}
self.present(alert, animated: true, completion: nil)