當顛倒視圖的細節時,我想要執行某些代碼。這與viewdidload不同,或viewdidappear不同,因爲我不希望它在應用第一次啓動時運行,因爲它是我的初始視圖控制器,但只有在從另一個視圖返回時纔會運行。如何在返回視圖時快速執行某些代碼
我該如何去做到這一點?
謝謝。
當顛倒視圖的細節時,我想要執行某些代碼。這與viewdidload不同,或viewdidappear不同,因爲我不希望它在應用第一次啓動時運行,因爲它是我的初始視圖控制器,但只有在從另一個視圖返回時纔會運行。如何在返回視圖時快速執行某些代碼
我該如何去做到這一點?
謝謝。
你應該爲這種事情使用委託,這是第一個tutorial i saw on google about it,但谷歌可以爲一些不同的。委託是所有iOS開發人員應該知道的以及何時使用的關鍵編碼模式。
因此,在你的情況下,你的第一個視圖控制器將是第二個視圖控制器的委託,這將允許第二個vc在第一個vc上執行方法,當它看起來合適時,對於這種情況我會假設在第二個VC可以追溯到第一
最簡單的方法是讓一些布爾屬性格式(如Bool firstAppear
),然後用真正的初始化它在viewDidLoad方法,然後在viewDidAppear:
if firstAppear {
firstAppear = false
return
}
您可以使用viewWillAppear中和viewDidAppear方法。他們不僅召喚了一次,而且每次都會出現您的視圖控制器。 viewDidLoad在視圖控制器加載後僅調用一次
讓我們考慮兩個視圖控制器VC1和VC2。您現在處於VC2並嘗試導航。在VC2的ViewWillDisappear中試試這個代碼。
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setBool(true, forKey: "mykey")
現在您正在導航回到VC1。在VC1 viewWillAppear中使用此代碼
let defaults = NSUserDefaults.standardUserDefaults()
let mykey = defaults.boolForKey("mykey")
if mykey {
defaults.setBool(false, forKey: "mykey")
//execute your code here
}
這不適合我嗎? – Khoury
首先,你可以設置此例如在的AppDelegate:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
...
let alreadyLaunched = NSUserDefaults.standardUserDefaults().boolForKey("alreadyLaunched")
if alreadyLaunched {
print("This is not the first app launch.")
}
else {
print("First app launch, setting NSUserDefault.")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "alreadyLaunched")
}
}
然後檢查,無論你想:
let alreadyLaunched = NSUserDefaults.standardUserDefaults().boolForKey("alreadyLaunched")
if alreadyLaunched {
print("This is not the first app launch.")
}
感謝您的 – Khoury