【iOS】UIButton에 ON/OFF의 스위치 처리를 1행으로 쓴다【Swift】
하지만 하나 하나 플래그를 세우는 것은 똑똑하지 않습니다 ...
게다가 복수의 UIButton에 on/off의 스위치를 갖게 되면 어
라고 하는 것으로, UIButton에 on/off의 스위치를 갖게 하고 싶을 때에, 간단히 일행으로 on/off의 스위치를 구현하는 코드를 썼기 때문에 (누구라도 하고 있을지도 모르지만) 노출하고 싶습니다.
샘플
개발 환경
목적
UIButton에 ON/OFF의 스위치 기능을 갖게 하고 싶을 때, 아래와 같이 쓰는 것은 스마트가 아니다.
ViewController.swift
@IBOutlet var label: UILabel!
var flag: Bool = false
@IBAction func tappedButton(_ sender: UIButton) {
if flag == false {
//ONにする時に走らせたい処理
label.text = "ONになったよ!"
flag = true
} else if flag == true {
//OFFにする時に走らせたい処理
label.text = "OFFになったよ!"
flag = false
}
}
버튼 1개만이라면 좋을지도 모르지만, 몇개의 UIButton에 스위치 기능을 갖게 하고 싶을 때는 모두에 같은 코드를 쓰는 날개가 된다. 그리고 누구나 생각할 수 있을 것 같아
UIButton.switch(on: , off: )
같은 느낌으로 한 줄로 쓰고 싶다(절실)해결 방법: UIControl의 isSelected 속성을 사용하여 Extension을 작성하면 됩니다(2019년 5월 업데이트).
그런 이유로 해결책을 "Extension으로 어떻게든 구현할 수 없을까-..."라고 생각해 노력해 보았습니다만 안 되었습니다()
아무래도 UIButton의 인스턴스에 상태를 보관 유지하는 프로퍼티를 갖게 할 필요가 있었으므로, 인스턴스 프로 > 패티를 추가할 수 없는 Extension에서는 구현은 어려울 것 같습니다. Extension으로 할 수 있는 방법 있으면 꼭 가르쳐 주세요(간청)
Extension으로 할 수있었습니다 (흰 눈)
UIButton의 슈퍼 클래스인 UIControl이 'isSelected'라는 선택된 상태를 유지하는 속성을 가졌습니다.
클래스를 만들 필요가 없었는지 어리석었다고 하는지, 무지하고 죄송합니다(흙밑자리)
그래서 UIButton의 Extension에서 다시 쓰면 이런 느낌이 듭니다.
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBOutlet var label: UILabel!
@IBAction func tappedButton(_ sender: UIButton) {
sender.switchAction(onAction: {
self.label.text = "ONになったよ!"
}) {
self.label.text = "OFFになったよ!"
}
}
}
extension UIButton {
func switchAction(onAction: @escaping ()->Void, offAction: @escaping ()->Void) {
//選択状態を反転
self.isSelected = !self.isSelected
switch self.isSelected {
case true:
//ONにする時に走らせたい処理
onAction()
case false:
//OFFにする時に走らせたい処理
offAction()
}
}
}
이것을 그대로 복사하여 Storyboard에서 @IBAction 접속하고 있는 UIButton의 클래스에 selectedSwitch를 지정해 주면 움직입니다. (다음 테스트용 label도 @IBOutlet 접속하고 있으므로 그것도 잊지 마세요)
덧붙여서 UIControl.isSelected 프로퍼티는 「선택된 상태=Button을 누르면 ON으로 한다」라고 하는 사양이므로, 「ON 상태의 Button을 OFF」로 한다고 하는 처리는 스스로 써야 합니다.
//extension UIButton {....
//func switchAction(...
選択状態を反転。ONだったらOFF、OFFだったらONに切り替える処理を入れてます。
self.isSelected = !self.isSelected
//switch ...
그런 이렇게 이 Extension에서 어느 UIButton에서도 한 줄로 on/off 스위치를 쓸 수 있게 되었습니다.
그 밖에 좋은 방법 있으면 가르쳐 주시면 기쁩니다!
Reference
이 문제에 관하여(【iOS】UIButton에 ON/OFF의 스위치 처리를 1행으로 쓴다【Swift】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gee-gae/items/92b5596139613d277cda텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)