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

使用CollectionView和CollectionViewCells创建Swift iOS 9自定义键盘,ios,iphone,swift,Ios,Iphone,Swift,所以我一直在四处寻找如何做这件事的指南,恐怕我是一无所获 因此,基本上我想使用Swift为iOS创建一个简单的emoji/image/gif键盘扩展 作为我主应用程序的一部分,我有一个viewController,其中包含一个collectionView和一个collectionViewCell。使用plist中的信息,我生成了一个图像集合(父组),当选中时,它会深入到第二级,显示该组的所有图像。从该级别选择图像会将图像复制到剪贴板 所以我把这个主要的应用程序部分做得非常好,现在我想模拟一下键盘

所以我一直在四处寻找如何做这件事的指南,恐怕我是一无所获

因此,基本上我想使用Swift为iOS创建一个简单的emoji/image/gif键盘扩展

作为我主应用程序的一部分,我有一个viewController,其中包含一个collectionView和一个collectionViewCell。使用plist中的信息,我生成了一个图像集合(父组),当选中时,它会深入到第二级,显示该组的所有图像。从该级别选择图像会将图像复制到剪贴板

所以我把这个主要的应用程序部分做得非常好,现在我想模拟一下键盘的功能

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

然后在
键盘视图控制器中调用

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,该单元格将显示plist文件中名称的图像

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

但是,在键盘视图中,我没有添加单元格的选项。将单元格拖到collectionView中也无济于事

所以我只是想知道,在
Keyboard.xib
的collectionView中放置一个可重复使用的单元格的最佳方法是什么,然后我可以用图像填充它

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

我已经创建了附加的
xib
文件,但不确定如何建立连接,使其在collectionView中用作可恢复的单元格

有什么想法或想法吗


谢谢

我通过为我的
键盘.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()
}

谢谢

请尝试包含您的collectionView数据源以及您注册手机所采取的步骤,否则,您无法确定如何从
Keyboard.xib
文件创建collectionView的出口。我无法将IBOutlet连接“拖动”到控制器。。。除非我走错路?你的意思是这样的,从电池到控制器没有“出口”。cell Xib将连接到一个cell子类。连接是通过
registerNib
以编程方式完成的。我尝试了这段代码,但无法加载键盘。你有没有把这个项目发布到网上的任何地方?我已经在这个问题上纠缠了很长时间:(谢谢!@theMouse:你能解决这个问题吗?我有一个非常独特的问题。每次我尝试去定义单元格时,我都会得到SIGQUIT。我的设置非常简单,因为我正在制作POC。KeyboardViewController是数据源和集合视图的委托。