隐藏切换目标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)
作为一般规则,您不应该尝试操纵其他视图控制器视图。这违反了封装原则,这是OOD(面向对象设计)的一个重要原则。
在这种特定情况下,您尝试的操作根本无法工作。在prepareForSegue触发时,目标视图控制器视图尚未加载,因此它的零售点将为零。
@pls有正确的想法。
在您的目的地视图控制器中创建公共财产hideSwitch
。在您的prepareForSegue中将hideSwitch
设置为true。然后在你的NewEntryViewController
的viewWillAppear中,检查hideSwitch
的值。如果是这样,隐藏你的开关。
该方法绝对有效。我用过几十次。如果您尝试这种方法无法正常工作,那么您的代码有问题。编辑您的问题,在末尾添加一个
##New code:
标签,并显示新prepareForSegue,加属性的定义,并在您NewEntryViewController
更新的viewWillAppear
代码。
非常感谢主席先生 –
我们是,切换是一个插座。我忘了提及如果有一个简单的属性(例如var a =“”),我想在prepareForSegue()中更改它。如何做呢? –
在第二段中,它说创建一个属性来保存该值。我已经添加了一些更多的代码来展示这一点。 – pls
谢谢。它应该工作,但它不工作。 –