Swift
Swift

Reputation: 1184

Cannot find 'UIAlertController' in scope error in swift?

Why I am getting Cannot find 'UIAlertController' in scope? error if i write alert function in separate swift file or if i use extension its not coming to another viewcontroller why?

code:

 func showAlert(title: String, message: String) {
  let alertController = UIAlertController(title: title, message:
    message, preferredStyle: .alert)
  alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: {action in
  }))
  self.present(alertController, animated: true, completion: nil)
}

error:

Cannot find 'UIAlertController' in scope,

Cannot find 'UIAlertAction' in scope

Cannot find 'self' in scope

Upvotes: 0

Views: 1887

Answers (1)

Mat
Mat

Reputation: 6324

Probably you forgot this in your viewController:

import UIKit

so your file has no idea what UIAlertController or UIAlertAction is

if you want to create an alert view controller to be used across multiple UIViewController you can do this:

import UIKit

class CustomAlertController: NSObject {
    
    let message:String?
    let title:String?
    
    init(title:String, message:String) {
        self.message = message
        self.title = title
    }
    

    func showAlert()->UIAlertController {
        let alertController = UIAlertController(title: self.title, message: self.message, preferredStyle: .alert)
        // you can further customize your buttons, buttons' title etc 
        alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: {action in
        }))
        return alertController
    }
    
}

then your view controllers

import UIKit
class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let alert = CustomAlertController(title: "Hello", message: "My message to the world")
        DispatchQueue.main.async {
        self.present(alert.showAlert(), animated: true, completion: nil)
        }
    }
}

Upvotes: 2

Related Questions