 /// A emoji keyboard view
 public class ISEmojiView: UIView, UICollectionViewDataSource, UICollectionViewDelegate {
 
+    /// the delegate for callback
+    public weak var delegate: ISEmojiViewDelegate?
+    
+    /// long press to pop preview effect like iOS10 system emoji keyboard, Default is true
+    public var isShowPopPreview = true
+    
     var defaultFrame: CGRect {
         return CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 236)
     }

        }
    }
    
    func longPressLocationInEdge(_ location: CGPoint) -> Bool {
        let edgeRect = UIEdgeInsetsInsetRect(collectionView.bounds, collectionInset)
        return edgeRect.contains(location)
    }

    }
    
    //MARK: Action
    private func emojiButtonPressed(sender: UIButton) {
        if let emoji = sender.titleLabel?.text {
            self.delegate?.emojiViewDidSelectEmoji(emojiView: self, emoji: emoji)
        }
    }
    
    @objc private func deleteButtonPressed(sender: UIButton) {
        self.delegate?.emojiViewDidPressDeleteButton(emojiView: self)
    }
    
    @objc private func pageControlTouched(sender: UIPageControl) {
        var bounds = collectionView.bounds
        bounds.origin.x = bounds.width * CGFloat(sender.currentPage)
        collectionView.scrollRectToVisible(bounds, animated: true)
    }
    
    //MARK: Tools
    static private func thisBundle() -> Bundle {
        let podBundle = Bundle(for: ISEmojiView.classForCoder())
        if let bundleURL = podBundle.url(forResource: "ISEmojiView", withExtension: "bundle") {
            if let bundle = Bundle(url: bundleURL) {
