Ios 在目标VC中隐藏开关-Swift
我有3个表视图控制器和一个目标视图控制器。 我想根据父表视图控制器的顺序隐藏/显示特定的开关。我尝试在每个表视图控制器中执行以下操作:Ios 在目标VC中隐藏开关-Swift,ios,swift,segue,uiswitch,Ios,Swift,Segue,Uiswitch,我有3个表视图控制器和一个目标视图控制器。 我想根据父表视图控制器的顺序隐藏/显示特定的开关。我尝试在每个表视图控制器中执行以下操作: override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if (segue.identifier == "editTableVC1") { let cell: UITableViewCell = sender as! UITableVie
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
}
}
若segue是从第二个表VC启动的,那个么将hidden属性设置为false,以此类推
有可能这样做吗?如果是,怎么做?我猜syncSwitch是一个IBOutlet。如果是这种情况,那么在创建视图时可能没有实例化它 要克服此问题,请在视图控制器上创建一个属性来保存布尔值,然后使用该属性设置syncSwitch IBOutlet 因此,在NewEntryViewController中创建一个名为:
isSyncSwitchHidden
并使用它来保存值:
prepare for segue方法中的代码将改用新属性:
entryVC.isSyncSwitchHidden=YES
然后,在NewEntryViewController中,ViewController将显示为执行以下操作:
self.syncSwitch.hidden = isSyncSwitchHidden
编辑:
我编写和编译的示例代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let desitinationViewController = segue.destinationViewController as! NewViewController
desitinationViewController.isSyncSwitchHidden = true
}
结果:
Optional(true)
一般来说,您不应该尝试操纵其他视图控制器视图。这违反了封装原则,这是面向对象设计(OOD)的一个重要原则 在这种情况下,您尝试的方法根本不起作用。在prepareForSegue激发时,目标视图控制器视图尚未加载,因此其出口将为零 @请有正确的想法 在目标视图控制器中创建公共属性
hideSwitch
。在prepareForSegue中将隐藏开关设置为true。然后在NewEntryViewController
的视图中,检查hideSwitch
的值。如果这是真的,隐藏你的开关
这种方法绝对有效。我已经用过几十次了。如果您尝试的方法不起作用,那么您的代码就有问题。编辑您的问题,添加
##新代码:
在末尾标记,并显示新的prepareForSegue,以及属性的定义和更新的视图将出现在NewEntryViewController
We中,yeah开关是一个插座。我忘了提到如果有一个简单的属性(例如var a=“”),我想在prepareforsgue()中更改它。如何实现?在第二段中,它说创建一个属性来保存该值。我添加了一些代码来说明这一点。你是说当你使用一个单独的属性时?当你说它不工作时,实际结果是什么?是的,当我使用一个新的bool属性时。它并没有隐藏开关。如果在:self.syncSwitch.hidden=isSyncSwitchHidden之后放一个断点并打印出两个值,它们会显示什么?
Optional(true)