當我的應用程序完成時,我將擁有50個左右的視圖控制器。爲了使用我的應用程序,用戶必須有可用的互聯網連接。如何創建一個所有視圖控制器都可以訪問的方法?
我來檢查,如果存在有效連接的代碼,但是我會在相同的代碼添加到每個視圖控制器(在我眼裏非常低效的,因爲我對每一個VC迅捷的文件),每個viewDidLoad
或viewDidAppear
有沒有辦法創建一個「通用」的方法,我只有一個地方存在Internet連接代碼(並且所有ViewController都可以訪問它)?
我正在使用Swift。
當我的應用程序完成時,我將擁有50個左右的視圖控制器。爲了使用我的應用程序,用戶必須有可用的互聯網連接。如何創建一個所有視圖控制器都可以訪問的方法?
我來檢查,如果存在有效連接的代碼,但是我會在相同的代碼添加到每個視圖控制器(在我眼裏非常低效的,因爲我對每一個VC迅捷的文件),每個viewDidLoad
或viewDidAppear
有沒有辦法創建一個「通用」的方法,我只有一個地方存在Internet連接代碼(並且所有ViewController都可以訪問它)?
我正在使用Swift。
你可以通過幾種方式來做到這一點。您可以創建一個全局子類,然後再進行子類化。
所以,你有你的MyViewController
類的代碼,然後你創建的這個來代替UIViewController
子類。
或者您可以創建一個類別。或者是一個單身人士。或者只是一個帶類方法的普通類。等等,它包含你想要運行的代碼。
然後在您的視圖控制器,你可以有代碼...
[SomeSharedClass runThisMethod];
在斯威夫特...
SomeSharedClass.runThisMethod()
正如David指出。這將是首選創建一個類或擴展等等作爲子類可能會導致你不得不創造一些不同的根類UITableViewController
,UIPageViewController
,UICollectionViewController
等子......這樣做
繼承:)也是一個更完整的答案。 +1 – d2burke
請注意,在UIViewController上使用類別/擴展與子類化相比具有明顯的優勢。主要的是,如果你採用子類方法,你可能需要繼承UIViewController,UITableViewController,UIPageViewController等。所有的UIViewController後代都可以使用一個類別/擴展。 –
最好的方式,如果你真的設置它,是繼承UIViewController並把它放在init方法中。這樣,每次VC實例化時它都會首先運行。所以,不是爲所有的VC擴展UIViewController,而是擴展你的新VC類。
有了這個用例,我子類中的所有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做的擴展,幫我發出警報而不是每次在每個視圖控制器中寫下代碼,我只是寫下文本字符串。我使用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")
}
繼承的UIViewController(RootViewController的) - 把你的代碼中viewDidLoad中 - 和所有其他控制器三秒鐘內,從RootViewController的 –