7

So habe ich mich entschieden, keine Storyboards in meine Nachrichten Extension Sticker Pack zu verwenden. Die iMessage-App wird mit einer Storyboard-Datei und einem MessagesViewController.swift geliefert. Ich habe 2 Dateien namens CollectionViewController und StickerCell erstellt. Die Idee ist, CollectionViewCell abzusetzen und es als MSStickerView zu werfen und diese Ansicht in meine CollectionView als "Zelle" zu entfernen. HierErstellen von Sticker Pack programmatisch, Problem mit Casting UICollectionViewCell als MSStickerView

ist der Code für die Einstellung des "StickerCell" als MSSstickerView up:

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 
} 

und der Code in meiner StickerCell Klasse:

class StickerCell: UICollectionViewCell { 
    var stickerView: MSStickerView! 
} 

ich das Problem bin zu raten, ist hier, wie ich habe dies erfolgreich mit dem Storyboard und dem genauen Code in StickerClass gemacht, außer dass die var ein IBOutlet war. Es ist klar, dass etwas nicht mit dem CollectionView verbunden ist oder ich einen Schritt verpasst habe. In Interface Builder würde ich den CollectionViewController erstellen, ihm eine CollectionView geben, ihm eine CollectionViewCell geben, dann eine UIView oben aufsetzen und seine Klasse in MSStickerView ändern.

Wie erstelle ich den Interface Builder-Workflow programmgesteuert neu?

Antwort

1

Es ist schwer zu wissen, was genau dein Problem ist, aber von dem, was ich dir sagen kann, bekommst du keine StickerCell mit einer Subview von stickerView zurück. Was unterscheidet sich von IB ist, dass Sie nie Ihre stickerView initialisieren. Sie müssen eine Init hinzufügen, die die Ansicht zu Ihrer Zelle erstellt und hinzufügt. Etwas wie (Pseudocode):

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

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

Ohhhhh total. Ich nehme an, was IB für mich tut. Deshalb zwinge ich mich, programmatisch etwas zu tun. Ich werde so etwas wie eine Einstellung geben. –

Verwandte Themen