2014-09-10 8 views
3

안녕하세요, 나는 100 사진 url의 flickr에서 가져온 배열이 있습니다. 내가 UICollectionView를 사용할 때 내가 100 개 세포를 표시 만 8 세포가 화면에 있고 나는 아래로 스크롤 할 때 ("뭔가") 다음 8 그들은 이전과 같은 동일한 볼 때 나는스위프트 - UICollectionView 반복 셀 (복제)

func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! 

과에 println을 실행 스위프트를 이길 방법을 알고

func collectionView(collectionView: UICollectionView?, numberOfItemsInSection section: Int) -> Int { 
    return self.photosUrls.count 
} 

그것은 100 개 세포를 만들지 만 세포가 항상 반복 ... 누구 : 그것은 배열의 내용이 내가 이것을 사용 100

하지만 콘솔에서 단지 8 시간 뭔가를 기록 XCode GM 시드의 새로운 버전에?

func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! { 
    let cell: ImageCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as ImageCell 
    let imgUrl = photosUrls[indexPath!.row] 
    let api_url = NSURL.URLWithString(imgUrl) 
    let URLReq = NSURLRequest(URL: api_url) 
    let NSOpQ:NSOperationQueue = NSOperationQueue() 
    NSURLConnection.sendAsynchronousRequest(URLReq, queue: NSOpQ, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in 
     if(error == nil){ 
      cell.theWPImage!.image = UIImage(data: data) 
     } 
     }) 
    return cell 
} 

답변

2

난 당신이 UITableViewUICollectionView 대리자 메서드의 작동 방식을 이해하지 못하는 것 같아요.

iOS는 매우 느리고 좋은 사용자 환경이 아니기 때문에 동시에 100 개의 셀을로드하지 않습니다. 따라서 cellForItemAtIndexPath 또는 cellForRowAtIndexPath 메서드는 셀이 화면에 나타날 때만 호출됩니다.

아래로 스크롤하면 cellForItemAtIndexPath 메서드가 다시 호출되어 새 셀을 만듭니다. 코드 println(indexPath.row)cellForItemAtIndexPath 안에 넣으면 위로 또는 아래로 스크롤 할 때 반복적으로 셀 번호가 인쇄됩니다.

아래로 스크롤 한 후 동일한 셀이 표시되면 코드가 cellForItemAtIndexPath 일 수 있습니다. 위의 전체 소스 코드를 붙여 넣지 않는 한 당신을 도울 수 없습니다. 또는 XCode GM 시드에 대한 UICollectionView의 버그 일 수 있습니다.

XCode 6 Beta 7에서 동일한 프로젝트를 시도하고보고하는 것은 어떻습니까? Xcode GM에서도 UICollectionView에 문제가 있습니다. IT는 제약 조건과 관련이 있습니다. 참조 : iOS 8 GM does not update constraints on collection views 나는 그 때문에 XCode 6 Beta 7을 사용 중입니다.

+0

코드를 추가합니다. 그것을보고 감사합니다 :) –

1

cellForRow 함수 안에 이미지를로드하려고합니다. 이미지가 다운로드 될 때까지 collectionView가 다른 셀을 표시하고 있습니다. 올바른 방법 중 하나는 배열의 viewDidLoad 내부에 이미지를로드 한 다음 해당 배열에서 cellForRow 내부로로드하는 것입니다.