使用CollectionView和CollectionViewCells创建Swift iOS 9自定义键盘

所以我一直在四处寻找关于如何做到这一点的指南,我害怕害怕!

所以基本上我想使用Swift为iOS创建一个简单的表情符号/图像/ gif键盘扩展.

对于我的主应用程序的一部分,我有一个viewController,它包含一个collectionView,带有collectionViewCell.使用plist中的信息,我生成一组图像(父组),当选择时,它会向下钻取到显示该组的所有图像的第二级.从此级别选择图像会将图像复制到剪贴板.

所以我已经使这个主要的应用程序部分非常好,现在想模仿键盘的功能.

所以我做了一个键盘扩展,它创建了一个类KeyboardViewController:UIInputViewController文件.
然后我创建了一个名为Keyboard.xib的新视图文件.在视图中,我添加了一个UICollectionView.

在KeyboardViewController中,然后我调用

override func viewDidLoad() {
    super.viewDidLoad()

    let nib = UINib(nibName: "Keyboard", bundle: nil)
    let objects = nib.instantiateWithOwner(self, options: nil)

    view = objects[0] as! UIView

    addKeyboardButtons()
}

当应用程序运行时,在键盘视图中显示我的空collectionView.

我现在的挑战是使用可重复使用的单元格填充collectionView,该单元格将显示plist文件中的名称的图像.

在我的主应用程序中,我能够确定collectionView中的项目数,它为我创建了一个单元格.

《使用CollectionView和CollectionViewCells创建Swift iOS 9自定义键盘》

但是,在键盘视图中,我没有添加单元格的选项.将单元格拖动到collectionView也没有帮助.

《使用CollectionView和CollectionViewCells创建Swift iOS 9自定义键盘》

所以我只是想知道,什么是将可重用单元格放入Keyboard.xib中我的collectionView的最佳方法,然后我可以用图像填充?

我从一篇较旧的帖子中读到某个人创建了一个新的xib文件,纯粹是他的包含imageView的单元格,并使用该xib单元文件填充在collectionView中.

我已经创建了额外的xib文件,但不确定如何建立连接以将它作为可恢复单元格在collectionView中使用…

有什么想法或想法吗?

谢谢!!!

最佳答案 我通过为我的Keyboard.xib创建一个新的类文件,并在那里创建和设置collectionView出口和委托来解决了这个问题.

class KeyboardView: UIView, UICollectionViewDelegate, UICollectionViewDataSource {

    @IBOutlet weak var collectionView: MyCollectionView!

    class func instanceFromNib() -> KeyboardView {
        return UINib(nibName: "Keyboard", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! KeyboardView
    }

    override func awakeFromNib() {
        print("awaking from nib")
        collectionView.delegate = self
        collectionView.dataSource = self
    }

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        print("adding numberOfItemsForSection")
        return 1
    }

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        print("adding cell")
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("myCell", forIndexPath: indexPath)
        cell.backgroundColor = UIColor.greenColor()
        return cell
    }

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
       print("setting size..")
       return CGSizeMake(320, 350)
    }
}

然后更新我的KeyboardViewController.swift文件以实例化

override func viewDidLoad() {
    super.viewDidLoad()

    let keyboardView = KeyboardView.instanceFromNib()
    keyboardView.collectionView.registerNib(UINib.init(nibName: "Cell", bundle: nil), forCellWithReuseIdentifier: "myCell")
    self.view.addSubview(keyboardView)

    addKeyboardButtons()
}

谢谢!

点赞