2017-01-12 1 views
0

Я хочу сделать функцию в классе NSObject для UIAlertCotroller. Так что я могу получить доступ к этой функции в любом классе. Я пытался с этим следующим кодом:Как сделать глобальную функцию для UIAlertController (ActionSheet) для доступа во многих классах проекта

open class func showActionSheet(_ delegate: UIViewController, message: String, strtittle: String, handler: ((UIAlertController) -> Void)! = nil) 
    { 
     let actionSheetController: UIAlertController = UIAlertController(title: strtittle, message: message, preferredStyle: UIAlertControllerStyle.actionSheet) 

     if handler == nil{ 
      actionSheetController.addAction(UIAlertAction(title: "Default(Off)" , style: .default , handler:{ (UIAlertAction)in 
      })) 
     } 
     else{ 
      actionSheetController.addAction(UIAlertAction(title: "Default(Off)" , style: .default , handler:{ (UIAlertAction)in 

      })) 
     } 

     delegate.present(actionSheetController, animated: true, completion: { 
      print("completion block") 
     }) 
    } 

Это функция, которую я сделал, но проблема в том, может быть количестве акций в ActionSheet, и они также имеют различный Tittle и различные стили.

Вопрос: Как это сделать? Пожалуйста помоги.

Спасибо!

+1

Вы можете попробовать это http://stackoverflow.com/questions/41588882/swift-how-to-present-viewcontroller-when-tapping-button-in-a-custom-alertcontr/41589066#41589066 –

+0

Спасибо за это, я думаю, что это только для AlertController (Alert type). Я ищу AlertController (лист действий). – Amanpreet

+0

Вам просто нужно изменить это, вот почему я пишу, вы можете попробовать так. Также вы можете добавить один параметр массива строк для названия действия. –

ответ

1

Я нашел решение моей проблемы с помощью этого Swift - How to present ViewController when tapping button in a custom AlertController

Их следуют модификации, что я должен для достижения моей цели. Вот код:

контроллер класса:

Alert.showActionSheet(self, message: "Save incoming media for this chat",strtittle: "",actionTittle: ["Default(Off)","Always","Never","Cancel"], 
             actionStyle: [.default,.default,.default,.cancel] , 
             withHandler: [defaultHandler, alwaysHandler, neverHandler, cancelHandler]) 

func defaultHandler(action: UIAlertAction) { 
     //Add code of present 
     print("DefaultHandler") 
    } 

    func alwaysHandler(action: UIAlertAction) { 
     //Add code of present 
     print("alwaysHandler") 

    } 

    func neverHandler(action: UIAlertAction) { 
     //Add code of present 
     print("neverHandler") 
} 

func cancelHandler(action: UIAlertAction) { 
    //Add code of present 
    print("cancelHandler") 
} 

В NSObject Класс:

open class func showActionSheet(_ delegate: UIViewController, message: String, strtittle: String, actionTittle: [String], actionStyle: [UIAlertActionStyle], withHandler handler: [((UIAlertAction) -> Void)]?) 
    { 
     var actionSheetController: UIAlertController = UIAlertController() 

     if message != "" || strtittle != "" 
     { 
      actionSheetController = UIAlertController(title: strtittle, message: message, preferredStyle: UIAlertControllerStyle.actionSheet) 
     } 

     for i in 0..<actionTittle.count 
     { 
      actionSheetController.addAction(UIAlertAction(title: actionTittle[i], 
                  style: actionStyle[i], 
                  handler: handler?[i])) 
     } 

     delegate.present(actionSheetController, animated: true, completion: nil) 

    } 

С помощью этого я могу дал ряд действий, их капелька и стили к действию лист. А также я могу просто вызвать этот метод в каждом классе. :)

1

Сделать расширение UIAlertController

extension UIAlertController{ 

func AlertWithTextField(_ view:UIViewController) -> UIAlertController{ 

    let actionSheetController: UIAlertController = UIAlertController(title: "Action Sheet", message: message, preferredStyle: UIAlertControllerStyle.actionSheet) 


     actionSheetController.addAction(UIAlertAction(title: "No" , style: .default , handler:{ (UIAlertAction)in 

     })) 
     actionSheetController.addAction(UIAlertAction(title: "Yes" , style: .default , handler:{ (UIAlertAction)in 

     })) 


    view.present(actionSheetController, animated: true, completion: { 
     print("completion block") 
    }) 
return actionSheetController 
} 
} 

Зов это от вашего ViewController

let alert = UIAlertController() 
    alert.AlertWithTextField(self) 
+0

Я ищу UIAlertControllerStyle.actionsheet. – Amanpreet

+0

Вы можете заменить alert на Actionsheet –

+0

@Amanpreet Я отредактировал ответ, вы можете использовать это. –

Смежные вопросы