Deep_Dev
article thumbnail
Published 2023. 3. 25. 15:58
[iOS] UI Switch 🍎 iOS/UIKit

📋 UI Switch

 

< 구현하고자 했던 것 >

 

1. UISwitch를 탭한다.

2. alert가 뜬다.

3. alert에서 OK를 누르면 UISwitch의 상태(value)가 바뀐다.

 

 

 

여기서, UISwitch의 값을 바꿀려고 터치를 했지만

alert가 뜨고 사용자가 OK를 누를 때 까지는 값이 변하지 않아야 한다.

 

이럴 때는, setOn을 이용한다.

 

 

 

결론적으로, 

 

1. Switch가 On 상태로 있고, 터치하여 Off하고자 할때 alert가 뜬다.

2. cancel을 누르면 원래 Switch의 값이 유지가 된다.( = On으로 유지 )

3. OK를 누르면 Switch의 값이 Off가 된다.

 

@IBAction func switchValueChanged(_ sender: Any) {
     if self.mySwitch.isOn { return } // 1
     
     self.mySwitch.setOn(true, animated: true) // 2
     let alert = UIAlertController(title: "해당 기능을 끄시겠습니까?", message: "어쩌구 저쩌구", preferredStyle: .alert)
  
     alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { _ in
         // self.mySwitch.setOn(true, animated: true) // 3
     }))
     alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { _ in
         self.mySwitch.setOn(false, animated: true) // 4
     }))
  
     self.present(alert, animated: true, completion: nil)
}

 

 

1. Switch를 Off할때만 alert를 띄울 것 이기 때문에 isOn이면 return 해준다.

 

2. 일단 Switch를 On으로 유지해놓기 위해 setOn을 호출한다.

On으로 해놓아야하므로 true를 return 해주고, animated는 반드시 true를 넣어준다. 

 

3. 있어도 되고 없어도 상관없다. 

이 alert가 불리는 상태는 반드시 On인 상태이고 && cancel을 눌렀으니 Switch 값 변화가 없다.

-> 기존에 On 이니까 setOn 굳이 호출 안해도 된다.

 

4. OK를 눌렀으니, 값이 off로 바뀐다.

setOn에 false를 넘겨준다. animated도 true로 넘기는게 더 보기 좋을 것이다.

 

 

 

 

 

 

 

 

 

참고블로그 : https://zeddios.tistory.com/1070