-
-
Notifications
You must be signed in to change notification settings - Fork 118
/
EmojiView_SwiftUI.swift
111 lines (93 loc) · 4.04 KB
/
EmojiView_SwiftUI.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
//
// SwiftUIView.swift
//
//
// Created by Michał Śmiałko on 16/06/2021.
//
import SwiftUI
import UIKit
@available(iOS 13.0, *)
public struct EmojiView_SwiftUI: UIViewRepresentable {
public typealias UIViewType = EmojiView
var didSelect: ((String) -> Void)?
var didPressChangeKeyboard: (() -> Void)?
var didPressDeleteBackward: (() -> Void)?
var dDidPressDismissKeyboard: (() -> Void)?
var needToShowAbcButton: (Bool)?
var needToShowDeleteButton: (Bool)?
var updateRecentEmojiImmediately: (Bool)?
var countOfRecentsEmojis: (Int)?
public init(
needToShowAbcButton: (Bool)? = false,
needToShowDeleteButton: (Bool)? = true,
updateRecentEmojiImmediately: (Bool)? = true,
countOfRecentsEmojis: (Int)? = MaxCountOfRecentsEmojis,
didSelect: ((String) -> Void)? = nil,
didPressChangeKeyboard: (() -> Void)? = nil,
didPressDeleteBackward: (() -> Void)? = nil,
dDidPressDismissKeyboard: (() -> Void)? = nil) {
self.needToShowAbcButton = needToShowAbcButton
self.needToShowDeleteButton = needToShowDeleteButton
self.countOfRecentsEmojis = countOfRecentsEmojis
self.updateRecentEmojiImmediately = updateRecentEmojiImmediately
self.didSelect = didSelect
self.didPressChangeKeyboard = didPressChangeKeyboard
self.didPressDeleteBackward = didPressDeleteBackward
self.dDidPressDismissKeyboard = dDidPressDismissKeyboard
}
public func makeUIView(context: Context) -> EmojiView {
let keyboardSettings = KeyboardSettings(bottomType: .categories)
keyboardSettings.needToShowAbcButton = needToShowAbcButton!
keyboardSettings.needToShowDeleteButton = needToShowAbcButton!
keyboardSettings.countOfRecentsEmojis = countOfRecentsEmojis!
keyboardSettings.updateRecentEmojiImmediately = updateRecentEmojiImmediately!
let emojiView = EmojiView(keyboardSettings: keyboardSettings)
if (needToShowDeleteButton!){
let bottomView = emojiView.subviews.last?.subviews.last
let collecitonViewToSuperViewTrailingConstraint = bottomView?.value(forKey: "collecitonViewToSuperViewTrailingConstraint") as? NSLayoutConstraint
collecitonViewToSuperViewTrailingConstraint?.priority = .defaultLow
}
emojiView.translatesAutoresizingMaskIntoConstraints = false
emojiView.delegate = context.coordinator
return emojiView
}
public func updateUIView(_ uiView: EmojiView, context: Context) {
guard let superview = uiView.superview else { return }
NSLayoutConstraint.activate([
uiView.widthAnchor.constraint(equalTo: superview.widthAnchor),
uiView.heightAnchor.constraint(equalTo: superview.heightAnchor)
])
}
public func makeCoordinator() -> Coordinator {
Coordinator(self)
}
public class Coordinator: NSObject, EmojiViewDelegate {
let parent: EmojiView_SwiftUI
init(_ parent: EmojiView_SwiftUI) {
self.parent = parent
}
// MARK: EmojiViewDelegate
public func emojiViewDidSelectEmoji(_ emoji: String, emojiView: EmojiView) {
parent.didSelect?(emoji)
}
public func emojiViewDidPressChangeKeyboardButton(_ emojiView: EmojiView) {
parent.didPressChangeKeyboard?()
}
public func emojiViewDidPressDeleteBackwardButton(_ emojiView: EmojiView) {
parent.didPressDeleteBackward?()
}
public func emojiViewDidPressDismissKeyboardButton(_ emojiView: EmojiView) {
parent.dDidPressDismissKeyboard?()
}
}
}
@available(iOS 13.0, *)
struct EmojiView_SwiftUI_Previews: PreviewProvider {
static var previews: some View {
EmojiView_SwiftUI()
.frame(width: 300, height: 500)
.border(Color.red, width: 2)
.padding()
.previewLayout(.sizeThatFits)
}
}