到我的应用程序完成时,我将拥有50个左右的视图控制器。为了使用我的应用程序,用户必须具有可用的互联网连接。
我有一个代码可以检查是否存在有效的连接,但是我必须为每个ViewController的每个viewDidLoad
或viewDidAppear
添加相同的代码(在我眼中效率非常低,因为我有每个VC的Swift文件
有没有办法创造一个普遍的"我只在一个地方出现互联网连接代码的方法(所有ViewControllers都可以访问它)?
我正在使用Swift。
答案 0 :(得分:3)
我现在有机会在Swift 2中进行扩展,以帮助我发送警报消息,而不是每次在每个视图控制器中写下代码我只需写下文本字符串。我将UIAlertController用于较新的IOS版本,将UIAlertView用于旧版本。
只需创建一个新的.swift文件,然后记下所需课程所需的扩展名。
import UIKit
extension UIViewController{
func userNamePassAlert(theTitle: String , theMessage: String){
if #available(iOS 8.0, *) {
let userTextFieldEmptyAlert = UIAlertController(title: theTitle, message: theMessage, preferredStyle: UIAlertControllerStyle.Alert)
let userTextFieldEmptyAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Cancel, handler: { (action) -> Void in
})
userTextFieldEmptyAlert.addAction(userTextFieldEmptyAction)
self.presentViewController(userTextFieldEmptyAlert, animated: true, completion: nil)
} else {
// Fallback on earlier versions
let userTextFieldEmptyAlert = UIAlertView()
userTextFieldEmptyAlert.title = theTitle
userTextFieldEmptyAlert.message = theMessage
userTextFieldEmptyAlert.addButtonWithTitle("Ok")
userTextFieldEmptyAlert.show()
}
}
}
这就是我在视图控制器中调用它的方式
else {
userNamePassAlert("Error Loging In", theMessage: "Username or Password field is empty. Try again")
}
答案 1 :(得分:2)
使用这个用例,我应该将所有ViewControllers子类化为超类(CommonViewController):
class CommonViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// do your common works for all sub-classes
}
}
class MyViewController : CommonViewController {
override func viewDidLoad() {
super.viewDidLoad() //call CommonViewController ViewDidLoad
//... then your work
}
}
答案 2 :(得分:1)
你可以通过几种方式做到这一点。您可以创建一个全局子类,然后将其子类化。
因此,您拥有代码所在的MyViewController
类,然后创建此类的子类而不是UIViewController
。
或者您可以创建一个类别。或单身。或者只是一个带有类方法的普通类。等等,包含您要运行的代码。
然后在您的视图控制器中,您可以获得代码......
[SomeSharedClass runThisMethod];
在斯威夫特......
SomeSharedClass.runThisMethod()
大卫指出。最好创建一个类别或扩展等......因为子类化可能会导致您必须为几个不同的根类UITableViewController
,UIPageViewController
,UICollectionViewController
等创建子类。
答案 3 :(得分:0)
如果您真的设置它,最好的方法是将UIViewController子类化并将其放在init方法中。这样,每次VC实例化时它都会首先运行。因此,不是为所有VC扩展UIViewController,而是扩展您的新VC类。