7

Tak, zdecydowałem się nie używać storyboardów w moim pakiecie naklejki rozszerzenie wiadomości. Aplikacja iMessage zawiera plik scenorysu i MessagesViewController.swift. Stworzyłem 2 pliki o nazwie CollectionViewController i StickerCell. Pomysł polega na podklasie CollectionViewCell i przesłaniu jej jako MSStickerView i usunięciu tego widoku do mojego CollectionView jako "komórki".Tworzenie pliku naklejki programowo, problem z odlewania UICollectionViewCell jako MSStickerView

Oto kod do utworzenia „StickerCell” jako MSSstickerView:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let item = data[indexPath.row] 
    return deQStickerCell(for: item, at: indexPath) 
} 

private func deQStickerCell(for sticker: MSSticker, at indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView?.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! StickerCell 
    cell.stickerView.sticker = sticker 
    return cell 
} 

a kod w mojej klasie StickerCell:

class StickerCell: UICollectionViewCell { 
    var stickerView: MSStickerView! 
} 

Zgaduję problem jest tutaj jak ja zrobiliśmy to z powodzeniem przy użyciu storyboardu i dokładnego kodu w StickerClass, z wyjątkiem var był IBOutlet. Tak więc wyraźnie coś nie łączy się z kolekcją CollectionView lub brakowało mi kroku. W programie Interface Builder utworzyłbym CollectionViewController, nadałem mu CollectionView, nadałem mu CollectionViewCell, a następnie uderzyłem UIView na górę i zmieniłem jego klasę na MSStickerView.

Programowalnie odtworzyć przepływ pracy modułu Interface Builder !?

Odpowiedz

1

Trudno jest dokładnie określić, jaki jest twój problem, ale z tego co mogę powiedzieć, nie otrzymujesz z powrotem naklejkiCell z podziałem na stickerView. Czym różni się od IB jest to, że nigdy nie inicjalizujesz naklejki. Musisz dodać init, który utworzy i doda widok do twojej komórki. Coś jak (pseudo kod):

override init(frame: CGRect) { 
    super.init(frame: frame) 

    self.stickerView = StickerView() 
    self.contentView.addSubview(self.stickerView) 
    // Set up your constraints & layout 
} 
+0

Ohhhhh całkowicie. Uważam za oczywiste, co IB robi dla mnie. Dlatego zmuszam się do robienia rzeczy programowo. Dam ci coś takiego. –