2017-01-27 1 views
0

내가 정의 세포와 UICollectionView를 구현하려면, 이전에 내가 가진에 UICollectionView를 넣어 :아이폰 OS : 별도의 클래스

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout 

내가

func numberOfSections(in collectionView: UICollectionView) -> Int 
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 

를 구현하고 잘 작동하고 내부. 이제는 셀 선택과 관련된 더 많은 기능을 구현하고 싶지만 UICollectionView 구현을 다른 파일로 이동하려고하므로 MVC 패턴을 따르고 싶습니다. 그럼 난이 :

class ViewController: UIViewController { 
    @IBoutlet var grid: UICollectionView! 
    ovverride func viewDidLoad() { 
     ... 
     grid = GridView(grid.frame, GridLayout()) //GridLayout() is the layout file working fine 
    } 
} 

및 다른 파일 :

class GridView: UICollectionView, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout { 
    func numberOfSections(in collectionView: UICollectionView) -> Int {} 
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {} 
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {} 
} 

그러나이 오류주지 실행하는 경우 : 여기 링크를 확인

collectionView:numberOfItemsInSection:]: unrecognized selector sent to instance 

을 : error, 그리고에 시도 ViewController에서이 작업을 수행하십시오.

grid.dataSource = grid as! UICollectionViewDataSource? 
grid.delegate = grid as! UICollectionViewDelegate? 

하지만 작동하지 않습니다. 이 문제를 해결하는 방법을 알 수 있습니까?

편집 클래스 AppDelegate가 오류를 제공합니다. 또한 GridView의 이니셜 라이저를 설정하려고 시도했습니다.

override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) { 
    super.init(...) 
    self.dataSource = self 
    self.delegate = self 
} 

그러나 작동하지 않습니다.

+0

모델 배열을 확인하십시오. 아니요. –

답변

-1

시도해 보셨습니까?

grid.dataSource = self 
grid.delegate = self 

이 기능을 사용하면 동일한 위임 및 데이터 원본 기능의 태그를 사용하여 컬렉션보기를 사용자 지정할 수 있습니다.

+0

시도해보십시오. 별로 작동하지 않습니다. – richards

0

데이터 소스를 설정하고 GridView 클래스의 초기화 자 (frame:, layout:) 내부에 GridView 대리자를 설정해야합니다.

override init(...) { 
    super.init(...) 
    self.dataSource = self 
    self.delegate = self 
} 

오류를 나타내는 정확한 줄을 말씀해 주실 수 있습니까? ViewController에 아직도 UICollectionView 관련 코드가 사용 중입니까?