UICollectionViewCell의 콘센트가 왜없는가요?


143

Interface Builder에서 사용자 정의 UICollectionViewCell을 작성하고 뷰를 클래스에 바인드 한 후 문자열을 사용하여 문자열의 레이블로 설정하려고하면 tha 레이블에 nil 값이 있습니다.

override func viewDidLoad() {
    super.viewDidLoad()

    // Register cell classes
    self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")
}

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

    var cell: LeftMenuCollectionViewCell
    cell = collectionView.dequeueReusableCellWithReuseIdentifier("ls", forIndexPath: indexPath) as LeftMenuCollectionViewCell
    println(cell.label) // <- this is nil, why??
    cell.label.text = "asd"

    return cell
}

그리고 서브 클래 싱 된 셀 :

class LeftMenuCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var activityIndicatorView: UIActivityIndicatorView!
}

명시적인 "!"를 사용하는 이유가 있습니까? 어디서나 유형 이름 외에? IBOutlets에서 중복되는 것처럼 보입니다. 중요한 것은 셀을 LeftmenuCollectionViewCell로 큐에서 빼내는 곳이지만 여기서는 할 수 없습니다. println 또는 NSLog 'cell'자체가 가능합니까?
mc01

1
"!"를 제거하면 또는 "?" 클래스 정의에서 컴파일러 오류 또는 충돌이 발생합니다. "!" 바인딩 할 때 기본값입니다.
János

셀 자체 개미 : <xxx.LeftMenuCollectionViewCell : 0x7aa7b320; baseClass = UICollectionViewCell; 프레임 = (0; 180 50); 레이어 = <CALayer : 0x7aa6f810 >>
János

모든 콘센트가 IB에 연결되어 있습니까? 다른 콘센트가 작동합니까? 다른 명백한 문제는 보이지 않습니다. 죄송합니다.
mc01

답변:


310

self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")다시 전화 하고 있습니다. 스토리 보드를 사용하는 경우 이것을 호출하고 싶지 않습니다 . 스토리 보드에있는 내용을 덮어 씁니다.

당신은 여전히 거세한 숫양 문제를 확인하는 경우 reuseIdentifier입니다 동일한dequeueReusableCellWithReuseIdentifier 의를 storyboard.


18
감사합니다! 사용자 정의 셀을 사용하는 것처럼 1 시간 이상을 보냈습니다.
DogCoffee

나는 같은 문제가 있지만이 코드 줄을 사용하지 않았다면 왜 같은 예외가 발생하는지 알 수 있습니까?
Dekel Maman

감사. 이것은 나를 위해 그것을 해결했다. 스토리 보드가 있었고 수동으로 뷰 컨트롤러를 추가했습니다. 상용구 코드에는 언급 한 줄이 포함되어 있습니다. 그것이 정확 해 보였지만 (올바른 식별자 및 클래스) 콘센트 연결을 거부했습니다. 이제 작동합니다. 단!
Joris Weimar

13
스토리 보드를 사용하는 경우 이것을 호출하고 싶지 않습니다. 스토리 보드에있는 내용을 덮어 씁니다. <-이건 정말 도와 줘
Sruit A.Suk

6
GAH, UICollectionViewController 템플릿에 얼마나 끔찍한 일입니까 !!!!! 고마워, 야노스
Kenny Wyland

53

이 줄을 제거하십시오.

self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")

3
이것이 왜 투표에 실패했는지 이해가되지 않습니다. 이것이 내 문제에 대한 답이었습니다.
Félix Simões

1
정답이므로 질문 한 사람이 표시해야합니다. 왜 작동하는지 이해하는 것이 좋을 것입니다 :)
Kiko Lobo

3
이 질문에 대한 답이 8 월 14 일에 내려진 이유는이 질문에 답하지 않은 것 같습니다.
Nitin Nain

1
그러나 그것을 사용하지 않으면-[UICollectionView _dequeueReusableViewOfKind : withIdentifier : forIndexPath : viewCategory :]에서 오류 어설 션 오류가 발생합니다.
Shaheera

이 줄이 필요하지 않은 이유에 대한 설명은 환영받을 것입니다. 새로운 컬렉션 뷰를 위해 Xcode 상용구에 의해 현재 추가되었습니다.
pkamb

47

xib를 사용하는 경우이 코드 줄을 viewdidload에 추가했는지 확인하십시오.

목표 C :

[self.collectionView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellWithReuseIdentifier:@"MyCellIdentifier"];

빠른:

collectionView.register(UINib(nibName:"MyCell", bundle: nil), forCellWithReuseIdentifier:"MyCellIdentifier")

클래스와 펜촉을 모두 등록해야합니까, 아니면 펜촉만으로 충분합니까?
RainCast

3
방금 펜촉을 등록했는데 문제가 해결되었습니다.
Amelia

등록하는 두 가지 방법이 있고 잘못된 것을 사용하고있는 것 같습니다 ... collectionView? .register (UINib (nibName : "YourItemClassName", bundle : nil), forCellWithReuseIdentifier : "yourIdentifier") collectionView? .register (YourItemClassName.self, forCellWithReuseIdentifier : "yourIdentifier")
Sergio

17

그 놈들을 등록해야 해요!

collectionView.register(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "CustomCellId")

6

등록하는 두 가지 방법이 있고 첫 번째로 잘못된 방법을 사용하고있는 것 같습니다. 두 번째 옵션으로 등록 된 사용자 지정 xib보기가 있으며 데이터가 있습니다!

1:

collectionView?.register(YourItemClassName.self, forCellWithReuseIdentifier: "yourIdentifier") 

2 :

collectionView?.register(UINib(nibName: "YourItemClassName", bundle: nil), forCellWithReuseIdentifier: "yourIdentifier")

0

비슷한 문제가 있었지만 레이블 텍스트를 변경할 수 있도록 CollectionViewCell을 위임하지 않은 것이 실수였습니다.


0

그 가장 좋은 방법은 추가 위치를 직접 스토리 보드에서 사용하는 것입니다 생각 CollectionView당신이를 제거해야 대안, CollectionViewCell당신에서 CollectionView스토리 보드에 다음과 같은 명령을 사용하여 셀을 등록 :

collectionView? .register (UINib (nibName : "YourItemClassName", 번들 : nil), forCellWithReuseIdentifier : "yourIdentifier")

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.