Skip to content

Commit 5bb16cb

Browse files
committed
Add MessagesView wrapping MessageViewController
1 parent 5efe4f1 commit 5bb16cb

3 files changed

Lines changed: 104 additions & 1 deletion

File tree

Example/ChatExample.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
1C5433DD24C389C300A5383B /* MessagesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C5433DC24C389C300A5383B /* MessagesView.swift */; };
11+
1C5433DF24C38DBF00A5383B /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C5433DE24C38DBF00A5383B /* SwiftUI.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
1012
383B9EB32172A1C4008AB91A /* MockUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 383B9EB22172A1C4008AB91A /* MockUser.swift */; };
1113
385C2922211FF32E0010B4BA /* CustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 385C2920211FF32E0010B4BA /* CustomCell.swift */; };
1214
385C2923211FF32E0010B4BA /* TableViewCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = 385C2921211FF32E0010B4BA /* TableViewCells.swift */; };
@@ -71,6 +73,8 @@
7173

7274
/* Begin PBXFileReference section */
7375
0364943D08CDBE656E6F6DF8 /* Pods-ChatExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ChatExampleTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ChatExampleTests/Pods-ChatExampleTests.debug.xcconfig"; sourceTree = "<group>"; };
76+
1C5433DC24C389C300A5383B /* MessagesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesView.swift; sourceTree = "<group>"; };
77+
1C5433DE24C38DBF00A5383B /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
7478
2AC6E3F5C11E39F57598DBE6 /* Pods_ChatExampleUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ChatExampleUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
7579
383B9EB22172A1C4008AB91A /* MockUser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockUser.swift; sourceTree = "<group>"; };
7680
385C2920211FF32E0010B4BA /* CustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomCell.swift; sourceTree = "<group>"; };
@@ -119,6 +123,7 @@
119123
isa = PBXFrameworksBuildPhase;
120124
buildActionMask = 2147483647;
121125
files = (
126+
1C5433DF24C38DBF00A5383B /* SwiftUI.framework in Frameworks */,
122127
C7CA53A1B85256A5097E7DC7 /* Pods_ChatExample.framework in Frameworks */,
123128
);
124129
runOnlyForDeploymentPostprocessing = 0;
@@ -147,6 +152,7 @@
147152
children = (
148153
385C2920211FF32E0010B4BA /* CustomCell.swift */,
149154
385C2921211FF32E0010B4BA /* TableViewCells.swift */,
155+
1C5433DC24C389C300A5383B /* MessagesView.swift */,
150156
);
151157
path = Views;
152158
sourceTree = "<group>";
@@ -295,6 +301,7 @@
295301
B0B06214A325DCCE2620950A /* Frameworks */ = {
296302
isa = PBXGroup;
297303
children = (
304+
1C5433DE24C38DBF00A5383B /* SwiftUI.framework */,
298305
3B316705C4717C3B4C916D62 /* Pods_ChatExample.framework */,
299306
56F0AC85B38034EC92CCBC7D /* Pods_ChatExampleTests.framework */,
300307
2AC6E3F5C11E39F57598DBE6 /* Pods_ChatExampleUITests.framework */,
@@ -550,6 +557,7 @@
550557
385C2943211FF38F0010B4BA /* SettingsViewController.swift in Sources */,
551558
385C2927211FF33B0010B4BA /* MockSocket.swift in Sources */,
552559
385C2947211FF38F0010B4BA /* BasicExampleViewController.swift in Sources */,
560+
1C5433DD24C389C300A5383B /* MessagesView.swift in Sources */,
553561
882B5E811CF7D53600B6E160 /* AppDelegate.swift in Sources */,
554562
385C292D211FF3520010B4BA /* CustomMessageFlowLayout.swift in Sources */,
555563
38CCCC592258419300DD5482 /* AutocompleteExampleViewController.swift in Sources */,

Example/Podfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@ SPEC CHECKSUMS:
2222

2323
PODFILE CHECKSUM: 90bd12ca685503630d7fe716609f4974660ed5ee
2424

25-
COCOAPODS: 1.9.1
25+
COCOAPODS: 1.9.3
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
//
2+
// MessagesView.swift
3+
// ChatExample
4+
//
5+
// Created by Kino Roy on 2020-07-18.
6+
// Copyright © 2020 MessageKit. All rights reserved.
7+
//
8+
9+
#if canImport(SwiftUI)
10+
11+
import SwiftUI
12+
import MessageKit
13+
14+
class MessageSwiftUIVC: MessagesViewController {
15+
override func viewDidAppear(_ animated: Bool) {
16+
super.viewDidAppear(animated)
17+
becomeFirstResponder()
18+
}
19+
}
20+
21+
@available(iOS 13.0.0, *)
22+
struct MessagesView: UIViewControllerRepresentable {
23+
24+
@Binding var messages: [MessageType]
25+
26+
func makeUIViewController(context: Context) -> MessagesViewController {
27+
let messagesVC = MessageSwiftUIVC()
28+
29+
messagesVC.messagesCollectionView.messagesDisplayDelegate = context.coordinator
30+
messagesVC.messagesCollectionView.messagesLayoutDelegate = context.coordinator
31+
messagesVC.messagesCollectionView.messagesDataSource = context.coordinator
32+
33+
return messagesVC
34+
}
35+
36+
func updateUIViewController(_ uiViewController: MessagesViewController, context: Context) {
37+
if !uiViewController.isFirstResponder {
38+
uiViewController.becomeFirstResponder()
39+
}
40+
uiViewController.messagesCollectionView.reloadData()
41+
}
42+
43+
func makeCoordinator() -> Coordinator {
44+
return Coordinator(messages: $messages)
45+
}
46+
47+
final class Coordinator {
48+
var messages: Binding<[MessageType]>
49+
init(messages: Binding<[MessageType]>) {
50+
self.messages = messages
51+
}
52+
}
53+
54+
}
55+
56+
@available(iOS 13.0.0, *)
57+
extension MessagesView.Coordinator: MessagesDataSource {
58+
func currentSender() -> SenderType {
59+
return MockUser(senderId: "", displayName: "")
60+
}
61+
62+
func messageForItem(at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> MessageType {
63+
return messages.wrappedValue[indexPath.section]
64+
}
65+
66+
func numberOfSections(in messagesCollectionView: MessagesCollectionView) -> Int {
67+
return messages.wrappedValue.count
68+
}
69+
}
70+
71+
@available(iOS 13.0.0, *)
72+
extension MessagesView.Coordinator: MessagesLayoutDelegate, MessagesDisplayDelegate {
73+
74+
}
75+
76+
@available(iOS 13.0.0, *)
77+
struct MessageViewPreviewWrapper: View {
78+
@State var messages = [MessageType]()
79+
var body: some View {
80+
MessagesView(messages: $messages).onAppear {
81+
SampleData.shared.getMessages(count: 20) { messages in
82+
self.messages.append(contentsOf: messages)
83+
}
84+
}
85+
}
86+
}
87+
88+
@available(iOS 13.0.0, *)
89+
struct MessagesView_Previews: PreviewProvider {
90+
static var previews: some View {
91+
MessageViewPreviewWrapper()
92+
}
93+
}
94+
95+
#endif

0 commit comments

Comments
 (0)