ios - 셀 내부 이미지뷰 중복생성 해결방법

2022. 2. 24. 11:29iOS 해결방법

상황

1. 테이블 뷰의 셀 안에 스크롤뷰(가로형)가 있다.

2. 스크롤뷰 안에 이미지뷰를 넣어서 가로 스크롤이 되도록 한다.

3. 가로형 스크롤뷰는 이미지뷰의 개수에 따라서 contentSize가 변한다.(이미지뷰에 들어갈 이미지 개수는 동적이다)

4. 뷰컨트롤러에서 넘긴 url개수에 따라서 이미지뷰를 생성하고 스크롤뷰에 넣는다.(3번과 같은내용)

 

문제점

1. 뷰 컨트롤러에서 reloadSection을 동작할 경우 테이블뷰의 델리게이트가 재시작된다.

2. 셀 안에 이미지뷰가 다시한번 생성되는 문제가 발생한다.

 

해결방법

1. 셀 내부에 이미지뷰가 생성되었는지 확인하는 전역변수를 하나 만든다.

// 이미지뷰 중복생성을 막기위한 변수
private var overlap = false

2. 뷰컨트롤러에서 보내준 url스트링값이 실제로 오는지 확인한다.

3. url스트링값이 제대로 올경우에 이미지뷰를 생성하도록 조건을 건다.(조건1)

3-1. 1번의 전역변수값이 false일 경우에만 이미지뷰를 생성하도록 한다.(조건2)

// url값이 왔을때만 동작
guard images[0] != "" && self.overlap == false else { return }

// 아래에서 이미지뷰 생성 메소드 동작

4. 이미지뷰가 생성되었다면 1번에서 생성한 변수값을 변경해준다(false -> true)

// 아이템이 1개 일경우
        if number == 1{
            scrollView.isScrollEnabled = false //스크롤기능 끄기
            addViewIndex(url: images[0], index: 0)
            self.overlap = true
            return
        }

        // 아이템이 여러개 일경우
        for index in 0..<number{
            addViewIndex(url: images[index], index: index)
        }
        
        self.overlap = true