使 UISwitch 在打开/关闭时隐藏/取消隐藏标签
Posted
技术标签:
【中文标题】使 UISwitch 在打开/关闭时隐藏/取消隐藏标签【英文标题】:Make a UISwitch hide/unhide a label when it toggles on/off 【发布时间】:2017-09-07 23:09:08 【问题描述】:MeditationSettingsViewController
有一个 UISwitch
通过 Segue 链接到 MeditationScreenViewController
。 UISwitch
不会从MeditationScreenViewController
隐藏名为phaselabel
的标签中的文本,而是显示MeditationSettingsViewController
屏幕。如何获取它以便开关不执行此操作,而是在开关打开/关闭时隐藏和取消隐藏phaselabel
?
class MeditationSettingsViewController: UIViewController
@IBAction func showCycleTitleChanged(_ sender: UISwitch)
if (sender.isOn == true)
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
if segue.identifier == "segue"
if let sendToDetailViewController = segue.destination as? MeditationScreenViewController
sendToDetailViewController.isSwitchOn = sender!.isOn
class MeditationScreenViewController: UIViewController
override func viewWillAppear(_ animated: Bool)
if isSwitchOn == true
//unhide the label
self.phaseLabel.isHidden = true
//set your label value here
else
self.phaseLabel.isHidden = false
【问题讨论】:
为了清楚起见,您希望开关打开/关闭以隐藏/取消隐藏另一个视图控制器中的阶段标签,对吧? MeditationScreenViewController 如何显示在屏幕上? 是的,没错。它通过单击弹出窗口上的取消来显示。弹出窗口连接到 MeditationSettingsViewController。 您需要在MeditationSettingsViewController
中获得对phaselabel
的(弱)引用,以便您可以隐藏/取消隐藏它。另一种方法是让MeditationScreenViewController
以某种方式监听(通过使用 NSNotificationCenter 或委托)切换开关,然后在那里隐藏/取消隐藏标签。在不知道您的项目结构的情况下,我很难为此提供代码。
好的,苹果在界面上做,切换开/关按钮来激活不同视图控制器中的东西。请让我知道您需要从项目中获得哪些额外代码?
我已经更新了使用 NSNotificationCenter 的答案。希望这应该有效。
【参考方案1】:
尝试使用NSNotificationCenter
让两个视图控制器知道开关状态的变化。
在MeditationSettingsViewController
的showCycleTitleChanged
函数中,执行以下操作:
@IBAction func showCycleTitleChanged(_ sender: UISwitch)
let data:[String: Bool] = ["state": sender!.isOn]
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "switchChanged"), object: nil, userInfo: data)
在MeditationScreenViewController
,像这样收听通知:
在viewDidLoad
:
NotificationCenter.default.addObserver(self, selector: #selector(self.showHideLabel(_:)), name: NSNotification.Name(rawValue: "switchChanged"), object: nil)
另外添加这个函数来处理通知:
func showHideLabel(_ notification: NSNotification)
self.phaselabel.isHidden = notification.userInfo?["state"] as? Bool
【讨论】:
它说 'MeditationSettingsViewController' 没有成员 phaselabel 所以不起作用。 是的 showCycleTitleChanged 连接到 UISwitch 的 valueChanged。 ibaction内部调用函数正常吗?? @user8270584 是的。 @aksh1t 我的意思是在里面定义一个函数??以上是关于使 UISwitch 在打开/关闭时隐藏/取消隐藏标签的主要内容,如果未能解决你的问题,请参考以下文章
当用户向上滚动时,如何使我的 tableHeaderView 捕捉并取消捕捉到隐藏/未隐藏位置