隐藏切换目标VC-斯威夫特

问题描述:

我有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开始,然后设置隐藏属性等于假等。

可以做到这一点吗?如果是这样,怎么样?

我在猜测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

谢谢。它应该工作,但它不工作。 –

作为一般规则,您不应该尝试操纵其他视图控制器视图。这违反了封装原则,这是OOD(面向对象设计)的一个重要原则。

在这种特定情况下,您尝试的操作根本无法工作。在prepareForSegue触发时,目标视图控制器视图尚未加载,因此它的零售点将为零。

@pls有正确的想法。

在您的目的地视图控制器中创建公共财产hideSwitch。在您的prepareForSegue中将hideSwitch设置为true。然后在你的NewEntryViewController的viewWillAppear中,检查hideSwitch的值。如果是这样,隐藏你的开关。

该方法绝对有效。我用过几十次。如果您尝试这种方法无法正常工作,那么您的代码有问题。编辑您的问题,在末尾添加一个

##New code:

标签,并显示新prepareForSegue,加属性的定义,并在您NewEntryViewController更新的viewWillAppear代码。

+0

非常感谢主席先生 –