我有以下警告方法。
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)
}
我收到错误,说animated
方法中有一个额外的参数presentViewController
,但当我把它取出时,它仍然不会忽略错误,然后我被告知completion
是一个额外的论点。
答案 0 :(得分:27)
presentViewController
。
present(alert, animated: true)
查看Apple Documentation了解详情。
来自Swift 3 completion
是可选的,所以如果你不想处理完成块,则不需要为此编写nil
,如果你想处理完成块,那么这样写。
self.present(alert, animated: true) {
}
注意:您的notifyUser方法是使用static
声明的,因此您无法使用self
,因此请删除它以删除更正后的下一个错误
答案 1 :(得分:27)
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)
答案 2 :(得分:11)
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)
答案 3 :(得分:4)
你试图在静态方法中使用self,而self应该是该类的当前实例,但是static不能使用self。
没有针对提示按钮的操作处理程序
在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];
}
在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)
}
使用警告按钮的操作处理程序
在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];
}
像这样调用上面的实例方法。
[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
}];
此处
yourViewController
是您将在其上显示此警报的控制器
在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)
}
}
像这样调用上面的静态方法。
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
})
此处
yourViewController
是您将在其上显示此警报的控制器
答案 4 :(得分:2)
Swift 3 尝试自定义操作取消
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)
答案 5 :(得分:0)
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)