Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create uialertcontroller in global swift

I'm trying to create uialertcontroller in Config.swift file as follow.

static func showAlertMessage(titleStr:String, messageStr:String) -> Void {
    let window : UIWindow?
    let alert = UIAlertController(title: titleStr, message: messageStr, preferredStyle: UIAlertControllerStyle.Alert);
    self.window!.presentViewController(alert, animated: true, completion: nil)
}

problem is I've found problem in self.window!.

Type 'Config' has no member 'window'

Please let me know how to solve that issue.

like image 353
PPShein Avatar asked Jul 01 '16 11:07

PPShein


1 Answers

swift

Here's what I used, this is the same as @penatheboss answered, just add the ability of adding actions and handlers.

extension UIViewController {
    func popupAlert(title: String?, message: String?, actionTitles:[String?], actions:[((UIAlertAction) -> Void)?]) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        for (index, title) in actionTitles.enumerated() {
            let action = UIAlertAction(title: title, style: .default, handler: actions[index])
            alert.addAction(action)
        }
        self.present(alert, animated: true, completion: nil)
    }
}

Just make sure actionTitles and actions array the same count. Pass nil if you don't need any action handler closure.

self.popupAlert(title: "Title", message: " Oops, xxxx ", actionTitles: ["Option1","Option2","Option3"], actions:[{action1 in

},{action2 in

}, nil])

Objective C:

Add the category for UIViewController

UIViewController+PopAlert.h

#import <UIKit/UIKit.h>

@interface UIViewController (UIViewControllerCategory)
- (void) popAlertWithTitle: (NSString*) title message: (NSString*) message actionTitles:(NSArray *) actionTitles actions:(NSArray*)actions;
@end

UIViewController+PopAlert.m

#import "UIViewController+PopAlert.h"

@implementation UIViewController (UIViewControllerCategory)
- (void) popAlertWithTitle: (NSString*) title message: (NSString*) message actionTitles:(NSArray *) actionTitles actions:(NSArray*)actions {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
    [actionTitles enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        UIAlertAction *action = [UIAlertAction actionWithTitle:obj style:UIAlertActionStyleDefault handler:actions[idx]];
        [alert addAction:action];
    }];
    [self presentViewController:alert animated:YES completion:nil];
}
@end

Usage:

#import UIViewController+PopAlert.h

...

[super viewDidDisappear:animated];
    NSArray *actions = @[^(){NSLog(@"I am action1");}, ^(){NSLog(@"I am action2");}];
    [self popAlertWithTitle:@"I am title" message:@"good" actionTitles:@[@"good1", @"good2"] actions:actions];
like image 108
William Hu Avatar answered Oct 13 '22 00:10

William Hu