개발/아이오에스

swift] scrollview안에서 uibutton - 액션이(touchupInside) 먹히지 않음

2021. 7. 29. 11:04

노란색 / 초록색이 UI button이고

scrollView - systemRed 이고 스크롤뷰안에 있는 뷰가 viewInScroll 이고 viewInScroll 안에 버튼과 달력 UI가 있다.
viewInScroll의 높이가 높아지면 스크롤이 작동을 하도록 구현을 했다.

이 달력 UI를 만들면서 해당 버튼을 테스트해봤지만 버튼의 액션이 작동하지 않았다. UI를 그릴 때가 문제인가? addTarget을 잘못 선언했나? UIbutton을 lazy var 형태로 바꿔보며... 고생을 많이 했다... 

이런저런 시도를 다 해봤지만 작동하지 않아 scrollView를 의심을 해봤다. 결론은 scrollView안에 존재하는 UIView인 viewInScroll의 높이, bottom제약이 걸려있지 않아 해당 버튼이 작동하지 않는 것이었다.

scrollView.topAnchor.constraint(equalTo: naviTopView.bottomAnchor).isActive = true
        if #available(iOS 11.0, *) {
            scrollView.bottomAnchor.constraint(equalTo:   view.safeAreaLayoutGuide.bottomAnchor  ).isActive = true
            scrollView.leadingAnchor.constraint(equalTo:  view.safeAreaLayoutGuide.leadingAnchor ).isActive = true
            scrollView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
        } else {
            scrollView.bottomAnchor.constraint(equalTo:   view.bottomAnchor  ).isActive = true
            scrollView.leadingAnchor.constraint(equalTo:  view.leadingAnchor ).isActive = true
            scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
        }
        
        
        scrollView.addSubview(viewInScroll)
        viewInScroll.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
        viewInScroll.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
        viewInScroll.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
        viewInScroll.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
        viewInScroll.widthAnchor.constraint(equalTo: scrollView.widthAnchor, multiplier: 1.0).isActive = true
      
        addChildVC(superVC: self, superView: viewInScroll, vc: calenderVC)
        
        calenderVC.view.topAnchor.constraint(equalTo:      viewInScroll.topAnchor, constant: 16).isActive = true
        if #available(iOS 11.0, *) {
            calenderVC.view.leadingAnchor.constraint(equalTo:  view.safeAreaLayoutGuide.leadingAnchor,  constant:  16).isActive = true
            calenderVC.view.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -16).isActive = true
        } else {
            calenderVC.view.leadingAnchor.constraint(equalTo:  view.leadingAnchor,  constant:  16).isActive = true
            calenderVC.view.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16).isActive = true
        }
//        viewInScroll.addSubview(test)
//        test.topAnchor.constraint(equalTo: calenderVC.view.bottomAnchor).isActive = true
//        test.heightAnchor.constraint(equalToConstant: 300).isActive = true
//        test.widthAnchor.constraint(equalToConstant: 300).isActive = true
//        test.bottomAnchor.constraint(equalTo: viewInScroll.bottomAnchor).isActive = true

 

 

해당 코드의 주석 처리(테스트)를 풀면 위 화면과 같은 결과가 나온다. - viewInScroll가 활성화되면서 배경 색상이 스크롤 뷰(레드)에서 viewInScroll(시스템 블루)로 변경되었다.
test뷰를 viewInScroll안에 넣어주고 (viewInScroll안에는 달력과 testView가 존재)

test.bottomAnchor.constraint(equalTo: viewInScroll.bottomAnchor).isActive = true 
test View의 bottomAnchor 제약을 viewInScroll.bottomAnchor와 같게 하여 활성화하게 만들었다.  - 이 동작을 통해 viewInScroll의
heightAnchor가 정해지면서 레이아웃이 정상적으로 자리 잡고 해당 버튼도 눌리게 되었다.


저작자표시 (새창열림)

'개발 > 아이오에스' 카테고리의 다른 글

swift] 앱 최초 실행 시 push 설정 1회성 처리 UserDefaults  (0) 2021.08.17
swift] UIView에 background에 image 파일 적용하기  (0) 2021.08.05
swift] 코드로 UIscrollView 구현하기  (0) 2021.07.28
swift] 테이블뷰의 특정 셀의 좌표값 얻기  (0) 2021.07.09
swift] KVO 사용 tableview의 높이 동적으로 할당  (0) 2021.07.05
'개발/아이오에스' 카테고리의 다른 글
  • swift] 앱 최초 실행 시 push 설정 1회성 처리 UserDefaults
  • swift] UIView에 background에 image 파일 적용하기
  • swift] 코드로 UIscrollView 구현하기
  • swift] 테이블뷰의 특정 셀의 좌표값 얻기
dev.jake
dev.jake
dev.jake
484jake
dev.jake
  • 분류 전체보기 (128) N
    • 개발 (87)
      • 아이오에스 (78)
    • 힘 (11)
    • 해외여행 (0)
    • 정보 (7)
    • 국내여행 (7)
    • 이슈 (0)

블로그 메뉴

  • github

최근 글

hELLO · Designed By 정상우.
dev.jake
swift] scrollview안에서 uibutton - 액션이(touchupInside) 먹히지 않음
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.