2016-02-21 38 views
0

我有3個表視圖控制器和一個目標視圖控制器。 我想隱藏/顯示一個特定的開關取決於父表視圖控制器的繼承。我試圖做的每個表視圖控制器的以下內容:隱藏切換目標VC-斯威夫特

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if (segue.identifier == "editTableVC1") { 
     let cell: UITableViewCell = sender as! UITableViewCell 
     let indexPath: NSIndexPath = self.tableView.indexPathForCell(cell)! 
     let navController: UINavigationController = segue.destinationViewController as! UINavigationController 
     let entryVC: NewEntryViewController = navController.topViewController as! NewEntryViewController 

     entryVC.syncSwitch.hidden = true 

    } 
} 

如果賽格瑞從第二表VC開始,然後設置隱藏屬性等於假等。

可以做到這一點嗎?如果是這樣,怎麼樣?

回答

0

我在猜測syncSwitch是一個IBOutlet。如果是這種情況,那麼在創建視圖時可能沒有實例化它。

爲了克服這個問題,請在視圖控制器上創建一個屬性來保存布爾值,然後使用它來設置syncSwitch IBOutlet。

所以NewEntryViewController創建一個名爲屬性:

isSyncSwitchHidden 

,並用它來保存值:在

代碼您的賽格瑞方法將改用新的屬性準備:

entryVC.isSyncSwitchHidden = YES

然後在NewEntryViewController中viewWillAppear做:

self.syncSwitch.hidden = isSyncSwitchHidden 

編輯:

,我已編寫和編譯

示例代碼:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    let desitinationViewController = segue.destinationViewController as! NewViewController 
    desitinationViewController.isSyncSwitchHidden = true 
} 

import UIKit 

class NewViewController: BaseClassViewController { 

    var isSyncSwitchHidden: Bool? 

    override func viewWillAppear(animated: Bool) { 
     print(isSyncSwitchHidden) 
    } 
} 

結果:

Optional(true) 
+0

我們是,切換是一個插座。我忘了提及如果有一個簡單的屬性(例如var a =「」),我想在prepareForSegue()中更改它。如何做呢? –

+0

在第二段中,它說創建一個屬性來保存該值。我已經添加了一些更多的代碼來展示這一點。 – pls

+0

謝謝。它應該工作,但它不工作。 –

0

作爲一般規則,您不應該嘗試操縱其他視圖控制器視圖。這違反了封裝原則,這是OOD(面向對象設計)的一個重要原則。

在這種特定情況下,您嘗試的操作根本無法工作。在prepareForSegue觸發時,目標視圖控制器視圖尚未加載,因此它的零售點將爲零。

@pls有正確的想法。

在您的目的地視圖控制器中創建公共財產hideSwitch。在您的prepareForSegue中將hideSwitch設置爲true。然後在你的NewEntryViewController的viewWillAppear中,檢查hideSwitch的值。如果是這樣,隱藏你的開關。

該方法絕對有效。我用過幾十次。如果您嘗試這種方法無法正常工作,那麼您的代碼有問題。編輯您的問題,在末尾添加一個

##New code:

標籤,並顯示新prepareForSegue,加屬性的定義,並在您NewEntryViewController更新的viewWillAppear代碼。

+0

非常感謝主席先生 –