[Swift] 상태에 따라 UIButton Title 변경하기

     

     

     

    안녕하세요 유진입니다!

    오늘은 UIButton의 setTitle 함수에 대해 알아보겠습니다

     

     

     

     

     

    버튼에 글씨를 넣어주려고 할 때 setTitle 함수를 사용했는데 for 파라미터는 뭘 뜻하는 건지 항상 궁금했음..... 

    다들 .normal .. 넣고 쓰길래 나도 그랬지만...   이유 있는 코드를 짜기 위해 오늘도 ㄱ ㅏ보ㅈ ㅏ 고~!!

        private var okButton = UIButton().then {
            $0.setTitle("확인", for: .normal)
        }

     

     

     

     

     


     

     

     

     

     

    setTitle 함수의 for 파라미터

    공식문서에서 for 파라미터를 한 줄로 설명하고 있음


    " 지정된 제목을 사용하는 상태 "

     

     

    그럼... 아래 코드를 해석해 보자면,

    "상태가 .normal일 때 "확인" 타이틀을 사용한다!"

        private var okButton = UIButton().then {
            $0.setTitle("확인", for: .normal)
        }

     

     

     

     

    오케 이해했음 *^ㅡ^* 

    그럼 normal 상태가 어떤 상태인데!!!!? 의문이 들 거임!  더 자세히 알아보자

     

     

    for 파라미터에는 UIControl.State 타입의 값이 들어갈 수 있군!

     

     

     

     

    그럼 UIControl.State 선언부를 살펴보즈아

    오... State 구조체 내부에 상태를 나타내는 7개의 변수가 선언되어 있음!

     

     

     

    변수들은 모두 UIControl.State 타입으로 선언되어 있으니 이 들을 for 파라미터 자리에 넣을 수 있겠군... (-ㄴ-)

    그럼 이 7개의 상태에 대해서 알아보자

     

    normal은 젤 마지막에 봐야 이해가 쉬우니 highlighted 부터 ㄱ ㄱ

     

     

     

    1.  highlighted

    버튼을 한 개 선언하고, normal 상태일 때에는 Title을 "기본"으로 설정해 두고

    highlighted 상태일 땐 버튼의 Title을 "하이라이트"로 변경되게 설정했음

        private var okButton = UIButton().then {
            $0.setTitle("기본", for: .normal)
            $0.setTitle("하이라이트", for: .highlighted)
        }

     

    이 상태는 바로 사용자가 버튼을 탭 하고 손가락을 화면에서 때기 전까지를 뜻함!!

    실제로 앱을 실행해 보면 클릭하기 전엔 "기본" 이었다가

     

    버튼을 탭 하면 "하이라이트" 로 글씨가 변경되고, 손가락을 떼면 다시 "기본"으로 변경됨!

     

    즉 highlighted 상태는


    " 버튼을 탭하고 있는 상태 (손가락이 버튼을 누르고있는 상태) "

     

     

     

     

     

     

     

     

     

    2.  disabled

    disabled. 비활성화라는 뜻을 가지고 있음! 그럼 버튼이 비활성화된 상태를 뜻하는 거군


    " 버튼이 비활성화된 상태 "

     

     

    근데 버튼을 어떻게 비활성화 시킴????? 요렇게

        private var okButton = UIButton().then {
            $0.isEnabled = false // 버튼 비활성화
            $0.setTitle("비활성화", for: .disabled)
        }

     

     

    isEnabled 속성을 사용해서 버튼을 비활성화시키고, 앱을 실행해 보면

    버튼이 비활성화되었기 때문에, disabled 상태에 표시해야 할 "비활성화" 타이틀이 표시되는 걸 볼 수 있음!

     

     

     

     

     

     

     

    3.  selected

    버튼이 선택된 상태를 뜻함! highlighted랑 헷갈릴 수 있는데,

    highlighted는 버튼을 "탭"한 상태이고, selected는 "선택"한 상태임


    " 버튼을 선택한 상태 "

     

     

    버튼을 선택한 상태가 어떤 상태인데욥.....

    바로 UIControl의 isSelected 변수를 사용하면 버튼을 선택한 상태로 설정할 수 있음!

    var isSelected: Bool { get set }

     

     

    아래와 같이 버튼을 선택한 상태로 설정하고

    selected 상태일 때 "선택됨" 타이틀을 사용하게 코드를 짬!

    private var okButton = UIButton().then {
        $0.isSelected = true // 버튼을 선택한 상태로 설정!
        $0.setTitle("기본", for: .normal)
        $0.setTitle("선택됨", for: .selected)
    }

     

     

    그럼 현재 버튼은 선택된 상태이므로 "선택됨" 타이틀이 표시됨 ^v^

     

     

     

     

     

     

     

     

     

    4.  normal


    " 버튼이 활성화되어있지만 선택(selected)되거나 강조(highlighted)되지 않은 기본 상태 "

     

    ~ 우리가 그냥 button의 title을 추가한다! 하면 normal을 사용하죠!  더 이상 설명할게 업다.

    private var okButton = UIButton().then {
        $0.setTitle("확인", for: .normal)
    }

     

     

     

     

     

     

     

     

     

    5. application

    그리고.. 날 고생시킨 어플리케이숑..... 도저히 application 상태를 버튼과 사용한 자료를 찾을 수 없었ㄷ ㅏ...

    그때 스택오버플로우에서 답을 찾음!  해당 사이트의 답변을 요약해 보자면,

     


    UIControl의 State를 사용하는 많은 하위 클래스들이 있는데(UIButton과 같은)

    이 상태(State)는 모든 UIControl 하위 클래스에 공통적으로 적용되는 상태가 아니라!!!!

    UIControl.State의 일부 하위 클래스에서만 사용할  있는 특수한 상태입니다.

    UIButton과는 별도로 연결되지 않으며,

    UIButton의 UIControl.State.application 상태는 별도의 의미를 갖지 않습니다.

     

     

    결론 땅땅땅

    " setTitle 함수 쓸 때에는 application 상태는 쓸 일이 업따~ "

     

    application 은 다음에 쓸 일이 생기면 다시 포스팅해 볼게요 헿.....

     

     

     

     

     

     

     

     

    6. reserved, focused

    이들 또한....  자료를 찾을 수 없었고... application과 같이 버튼에는 사용하지 않는 상태로 추측된다!

    자료를 찾으면 내용 추가하겠음! 'ㅁ' !!!

     

     

     

     

     

     

     

     

     

     


     

     

     

     

    오늘 이렇게... UIControl의 State를 SetTitle 함수와 함께 알아봤는데

    ... 실제로 개발할 땐 사용 안 할 것 같당

     

    그래도 이제 왜 이때 normal 상태 쓰는지 아세요????

    하면 답할 수 이씀!!!! 뿌 ㅡ 듯 ㅎㅎㅎ

     

     

     

     

    'Swift' 카테고리의 다른 글

    [Swift] Snapkit - inset, offset 언제 사용해야할까?  (0) 2023.07.02

    댓글