2017-09-07 7 views
0

MeditationSettingsViewControllerUISwitch이며, Segue는 MeditationScreenViewController입니다. UISwitchphaselabel 레이블의 텍스트를 MeditationScreenViewController에서 숨기지 않고 대신 MeditationSettingsViewController 화면을 표시합니다. 스위치가이 작업을 수행하지 않도록하려면 어떻게해야합니까? 스위치를 켜고 끌 때 phaselabel을 숨기거나 숨기기를 취소 하시겠습니까?UISwitch가 켜기/끄기로 전환 할 때 레이블을 숨기거나 보이게 함을 설정합니다.

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 
    } 
} 
+0

스위치를 켜기/끄기로 전환하여 다른 뷰 컨트롤러에서 phaselabel을 숨기거나 숨기기를 원하십니까? MeditationScreenViewController는 어떻게 화면에 표시됩니까? – aksh1t

+0

네, 맞습니다. 팝업 창에서 취소를 클릭하면 표시됩니다. 팝업 창이 MeditationSettingsViewController에 연결됩니다. –

+0

'MeditationSettingsViewController'의'phaselabel'에 (취약한) 참조를 가져와 숨김/숨기기를 할 수 있어야합니다. 이것을하기위한 또 다른 방법은'MeditationScreenViewController'가 스위치에 NSNotificationCenter 또는 위임을 사용하여 어떻게 든 들어서 듣고 토글 한 다음 거기에서 레이블을 숨기거나 숨기기를 해제하는 것입니다. 프로젝트의 구조를 알지 못해도 코드를 제공하기가 어렵습니다. – aksh1t

답변

1

NSNotificationCenter을 사용하여 두보기 컨트롤러가 스위치 상태 변경을 인식하도록하십시오.

showCycleTitleChanged 기능에 MeditationSettingsViewController에서

, 이렇게 :

@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 
} 
+0

그것은 'MeditationSettingsViewController'회원 phaselabel을 가지고 있지 않습니다 그래서 작동하지 않습니다 말한다. –

+0

예 showCycleTitleChanged는 UISwitch의 valueChanged에 연결됩니다. –

+0

ibaction 내부에서 함수를 호출하는 것이 정상입니까? – Vimal