iOS) 특정 iPhone, iPad에서 tableView cell안에 있는 버튼이 클릭이 안될때..(feat. addtarget, lazy var, dellocation)

2022. 2. 14. 15:04iOS/iOS memo

728x90
반응형

https://stackoverflow.com/questions/28894765/uibutton-action-in-table-view-cell

 

UIButton action in table view cell

I am trying to run an action for a button being pressed within a table view cell. The following code is in my table view controller class. The button has been described as "yes" in an outlet in my

stackoverflow.com

 

테이블뷰 내부에 있는 테이블뷰 셀에,

vertical stackView를 넣고 vertical stackView 내부에

label과 horizontal stackView를 넣어서 spacing을 주었고

horizontal stackView에는 UIButton이 올라가있는 UIView 두개를 넣고 fill equally해준 상황.

 

"특정 iPhone과 아이패드에서만, 버튼을 연결한 addtarget함수가 호출이 안되는것"이 문제였다

다른 기기들에서는 문제없이 잘 작동되니까 난 당연히 코드엔 문제 없겠지~ 라고 당차게 생각했는데

역시, 자신만만하는 순간 삽질의 시작.... 항상 의심해봐야됌.ㅎㅎ

 

문제 해결 전에 고민해봤던것

1. constraints 가 어긋나서 버튼 클릭 안되는건 아니었는지?

2. 버튼에 isEnabled 등이 처리가 안된건 아닌지 시도..

3. 버튼이 아니라 아예 cell 자체가 안눌리고 있는건 아닌지? 하필 또 didselectrowat이 호출 안되고 있었음

(tableView.dataSource = self안해줘서 호출 안되는거였고....... cell 자체에는 문제될게 없었음. 걍 의미없는 단순 삽질이었음.)

4. 위의 절망적인 실수를 알지 못했을때.. 하필 또 버튼이 잘 눌렸던 iOS 기기들 버전이 (15.2.1)(15.1) 이었고,

버튼이 잘 눌리지 않았던 iOS기기들 버전이 (14.8.1 아이폰 미니12), (14.7.1 아이패드) 였어서.. 아 iOS 버전에 따라서 또 didselectrowat이 불려지고, 안불려지기도 하는건가............ 라는 정말 역대급 삽질의 시작.............

5. 아무튼 dataSource처리와 같은 단순한 처리로 인해서 해결해줬고 그 이후 우연히 버튼이 없는쪽의 cell을 눌렀을땐  didselectrowat이 잘 호출되는데, cell에 있는 Button을 누르면  잘만 호출되던 didselectrowat이 호출 안되는걸 발견. 아 ..ㅋㅋㅋㅋ 너구나...?

 

 

결국 버튼 관련 코드에 질척대다가 해결은 해주었음

//이 코드를
private let thumbsUp: UIButton = {
        let thumbsUp = UIButton()
        thumbsUp.setImage(UIImage(named:"review_yes_hand_on_black"), for: .normal)
        thumbsUp.addTarget(self, action: #selector(thumbsUpAction), for: .touchUpInside)
        thumbsUp.adjustsImageWhenHighlighted = false
        return thumbsUp
    }()   


//let thumbsUp을 lazy var thumbsUp으로 고쳐주어서 해결했다
lazy var thumbsUp: UIButton = {
        let thumbsUp = UIButton()
        thumbsUp.setImage(UIImage(named:"review_yes_hand_on_black"), for: .normal)
        thumbsUp.addTarget(self, action: #selector(thumbsUpAction), for: .touchUpInside)
        thumbsUp.adjustsImageWhenHighlighted = false
        return thumbsUp
    }()
//아래와 같이 변경해서 해결

결론

dellocation에 관련된 이슈였는데 아.. 전공을 더 파야되는건지(진지) 자괴감이 들었던 하루.

 

728x90
반응형