我正在構建一個基於Tab View Controller的iOS應用程序。我創建了一個「聯繫人」選項卡,用戶可以從列表中找到並選擇聯繫人。當用戶選擇聯繫人時,它將接收聯繫人的姓名並將其傳遞到不同的選項卡。該功能正在做像這樣:因爲它應該到目前爲止(名稱被加載到文本字段)Segue w/Tab View Controller保持傳遞值
func passName(name: String) {
let navTab = self.tabBarController!.viewControllers![2] as! UINavigationController
let homeTab = navTab.viewControllers[0] as! MainController
homeTab.passedName = name
tabBarController?.selectedIndex = 2
}
一切正常。我的問題是,每次更改選項卡後,該值似乎都會恢復,然後返回到「我的主頁」選項卡。例如,如果我從我的聯繫人中選擇「John」,它會將我帶到Home標籤頁並將John的名字放在文本框中。假設我刪除名稱的最後兩個字母,現在它是「Jo」。如果我加載不同的標籤並返回,名稱字段已被重置爲「John」。就好像每次打開「主頁」選項卡時都會重新傳遞值。此外,每次在傳遞名稱後加載主頁選項卡時,我的控制檯都會打印:「名稱傳遞:約翰」,因此它顯示每次出現選項卡時都會處理此事件。這裏是我處理的名稱代碼:
var passedName: String!
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
//Checks if name was passed to controller
if let validName = passedName {
print("Name passed: \(validName)")
nameTextField.text = validName
}
}
我是不是傳遞數據是否有誤?我在想這可能是因爲我在viewWillAppear方法中調用了上面的代碼,但這沒有任何意義,因爲實質上只有一次從「聯繫人」選項卡傳遞數據。謝謝!
謝謝!如果我更新了passedName值,當我更改標籤並返回時,它是否會被覆蓋?將代碼放在viewDidLoad中可能會改變這一點嗎? – JD2017
不,請勿將其放入viewDidLoad中,因爲每次回到該選項卡時都不會調用它。只要讓它在viewWillAppear中並在更改UiTextField時繼續更新passedName –
正確,但是我所說的每次加載Home選項卡時,都會更新passedName。因此,無論我是否更改並更新值,如果切換標籤並返回,它將被傳遞值 – JD2017