나중에 또 같은 삽질을 하지 않기 위해 내가 시도해봤던 여러가지 방법을 다 기록해두기로 했다.


문제 상황


- UITableView 가 특정 상황에 multipleSelection 활성화가 된다.

- UITableView 의 각 셀 + UITableView 자체도 여러가지 GestureRecognizer 가 켜켜이 쌓여있다. (탭, 롱프레스 등등)


→ select 동작이 원활하지 않은 문제가 발생했다. touch 를 하면 셀렉트 되지 않고 꾸우욱 눌러야 didHighlight 로 겨우 들어가는.. 그런 상태



해결법 #1


gesture recognizer 들의 cancelsTouchesInView 옵션을 false 로 한다.

gestureRecognizer.cancelsTouchesInView = false


위 옵션은 제스처가 인식될 때 해당 터치 이벤트가 뷰에도 전달되는지와 관련 있는 옵션이다.


A Boolean value affecting whether touches are delivered to a view when a gesture is recognized.


출처: 애플 공식 가이드


근데 내 경우에는 이 옵션만으로는 해결되지 않았다.




해결법 #2


gesture recognizer 들에 아래 함수를 구현한 delegate 를 설정해준다.

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
    return /* true of false */
}


Gesture Recognizer 가 터치를 받아야 할지 말아야 할지를 반환하는 함수인데, false 를 반환하는 경우에는 gesture recognizer 가 터치 이벤트를 처리하지 않는다(?)

표현이 적합한지 모르겠어서 여기에도 문서를 첨부하자면


Ask the delegate if a gesture recognizer should receive an object representing a touch.


출처: 애플 공식 가이드


근데 이걸로도 해결되지 않았다 ㅎㅎ





해결법 #3


UITableView 의 delaysContentTouches 옵션을 false 로 한다

tableView.delaysContentTouches = false


이 옵션은 UIScrollView 하위의 옵션인데, 스크롤을 위해 터치 다운 액션에 대한 처리를 지연할 것인지 여부를 결정하는 옵션이다.


A Boolean value that determines whether the scroll view delays the handling of touch-down gestures.


출처: 애플 공식 가이드


결과적으로 이 설정을 통해 select 지연은 해결되었지만, 스크롤을 하려 해도 스크롤을 시작할 때 터치한 셀이 선택되는 문제가 생긴다.

더 좋은 방법은 없을지 더 알아봐야 할 것 같다.



아!!!!!!!!!!!!!

넘 화난당!!!!!!!!!!!!!!!!!!!


TestFlight 연동을 해야하는데,

App store 에 build 올리는 거에 대해 정리된 문서를 보다가 

영어 문장을 너무 대충 읽어서


"니 앱이 적절한 Bundle ID를 가지고 있고, Team ID가 잘 셋팅되었는지, 그리고 Code Signing Identity 란에 automatic distribution certificates 를 설정해뒀는지 확인해라"

라고 적혀있는데

적절하게 섞어보는 바람에


"블라블라~ Code Signing Identity 란에 Team ID가 잘 셋팅되었는지 봐라" 로 보는 바람에,,


이 부분을,, 수정해버렸었다


원래는 

Debug / Any iOS SDK 는 둘 다 iOS Developer

Release / Any iOS SDK 는 둘 다 iOS Distribution 이어야 한다고 되어있다.



그래서 저 부분을 잘못해서 Team ID로 셋팅해주고 돌렷더니

conflicting provisioning settings 어쩌구~~

니 Code Signing은 Automatic 하게 잡는 게 어떠하니 어쩌구~~ 거려가지고


헉 하고 다시 문서 확인해보니 iOS Distribution 으로 셋팅된 게 맞는지 확인해보라고.. 여서...

다시 셋팅 바꾸고 Archive 를 돌렷는데!!!!!!!!!!


나는 분명 셋팅을 바꿨는데 이자식이 자꾸 똑같은 에러를 뱉음 ㅠㅠㅠㅠㅠㅠㅠㅠㅠ

Clean 도 해봤는데..........




넘 빡쳐서 또 구글링을 해보았더니

갓-택오버플로우에서 그거 엑코 버그라고.. 해결법을 알려줬다.



저기 보이는 Automatically manage signing 을 체크 해제했다가 다시 체크하고, Team 선택도 다시 해주면 된다!!



근데 웃긴게 저러고 나면 Archive도 잘 되고 다 좋은데


Release 하위의 Any iOS SDK 가 iOS Developer 로 바뀐다?!


아직 왜인지 모르겠다.

어쨌든 잘 되니 된 거 아님...........? ㅎㅎ


다음에는 TestFlight 연동하는 걸 정리해서 올려봐야겠다.

한글로 된 글들은 전부다 예에에엣날 글들이라 ㅠㅠ 흑흑잉

'Programming > iOS / Swift' 카테고리의 다른 글

[Bug/Issue] UITableView Select 먹히는 문제  (0) 2018.11.21
Swift 컨벤션 검사 - Swiftlint  (0) 2017.09.18

http://soheee.tistory.com/60


언젠가 지금 내 프로젝트에도 적용해야 할 부분이니

저장!


누군진 몰라도 정리를 참 잘했네요 ㅎ_ㅎ

+ Recent posts