개발/아이오에스

ios] 코드로 UITabBarController의 탭에 UICollectionViewController를 선언하고 콜렉션뷰 설정하기(테이블뷰처럼)

2021. 3. 8. 19:59



class FeedController: UICollectionViewController-  UITabBarController에 선언되어있는 FeedController은 UICollectionViewController이다 이 상태로 런을 하면 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter'같은 에러가 나타난다  UICollectionView는 Nil이 아닌 레이아웃 매개 변수로 초기화해야 하기때문.

 

let layout = UICollectionViewFlowLayout()

let feed = templateNavigationController(unselectedImage:  imageLiteral(resourceName: "home_unselected"), selectedImage:  imageLiteral(resourceName: "home_selected"), rootViewController: FeedController(collectionViewLayout: layout))

 

이렇게 rootViewController을 선언하는 부분에 (collectionViewLayout: layout)으로 UICollectionViewFlowLayout으로 레이아웃 매개 변수 초기화를 해준다.

 

FeedController 에서

 func configureUI(){

        view.backgroundColor = .white

    }

whte로 백그라운드를 설정했었다.

 

하지만 실행을하면 배경이 검은색으로 보인다. 그 이유는 FeedController가 뷰컨트롤에서 UICollectionViewController으로 변했기 때문에

 func configureUI(){

        collectionView.backgroundColor = .white

    }

view가 아닌 collectionView의 백그라운드로 설정을 바꾸고 런을하면 

흰색으로 적용된 모습을 볼 수 있다.

 

이제 콜렉션뷰를 기본 설정하기위해 

extension FeedController: UICollectionViewDataSource{

    

}

UICollectionViewDataSource을 extension하여 설정을 하려했다 하지만 class FeedController: UICollectionViewController 

선언한 UICollectionViewController이 UICollectionViewDataSource이미 포함이 되어있어 extension 할 때UICollectionViewDataSource을 따로 적어 줄 필요가 없다

 

extension FeedController{

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        return 5

    }

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuserIdentifier, for: indexPath)

        cell.backgroundColor = .red

        return cell

    }

}

 

func configureUI(){

        collectionView.backgroundColor = .white

        collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuserIdentifier)

    }

register을 통해 콜렉션뷰를 선언해주고 cellForItemAt과 numberOfItemsInSection으로 섹션의 수와 셀을 설정해줬다.

 

 

이제 collectionView를 테이블뷰처럼 바꿔주는일을 해야한다.

 

extension FeedController: UICollectionViewDelegateFlowLayout{

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        return CGSize(width: view.frame.width, height: 250)

    }

}
UICollectionViewDelegateFlowLayout을 extension해서 가로의 길이를 view.frame.width 뷰의 width크기만큼으로 늘리고  세로를 250으로 설정해줬다.

 

 

코드를 통해 콜렉션뷰를 테이블뷰처럼 설정완료!

 

저작자표시 (새창열림)

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

ios] CAGradientLayer - 그라데이션 효과  (0) 2021.03.11
ios] 코드로 UICollectionViewCell 설정하고 UICollectionViewController에서 적용하기  (0) 2021.03.08
ios] 코드로 UITabBarController 만들고 탭 별 뷰컨트롤러 네비게이션 컨트롤러로 만들고 tabBarItem 수정하기  (0) 2021.03.08
swift] attributedText으로 텍스트마다 다양한 스타일(폰트,사이즈,색상), NSMutableParagraphStyle으로 텍스트사이 간격주기  (0) 2021.03.04
switf] collectionview 셀 간격 설정하기  (0) 2021.03.04
'개발/아이오에스' 카테고리의 다른 글
  • ios] CAGradientLayer - 그라데이션 효과
  • ios] 코드로 UICollectionViewCell 설정하고 UICollectionViewController에서 적용하기
  • ios] 코드로 UITabBarController 만들고 탭 별 뷰컨트롤러 네비게이션 컨트롤러로 만들고 tabBarItem 수정하기
  • swift] attributedText으로 텍스트마다 다양한 스타일(폰트,사이즈,색상), NSMutableParagraphStyle으로 텍스트사이 간격주기
dev.jake
dev.jake
dev.jake
484jake
dev.jake
  • 분류 전체보기 (142) N
    • 개발 (87)
      • 아이오에스 (78)
    • 힘 (11)
    • 해외여행 (0)
    • 정보 (11) N
    • 국내여행 (8)
    • 이슈 (0)

블로그 메뉴

  • github

최근 글

hELLO · Designed By 정상우.
dev.jake
ios] 코드로 UITabBarController의 탭에 UICollectionViewController를 선언하고 콜렉션뷰 설정하기(테이블뷰처럼)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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