Skip to content

Commit f481519

Browse files
committed
Create SwiftUIExampleView to show use of MessagesView and data binding
1 parent 2f6a2a1 commit f481519

4 files changed

Lines changed: 54 additions & 24 deletions

File tree

Example/ChatExample.xcodeproj/project.pbxproj

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
/* Begin PBXBuildFile section */
1010
1C5433DD24C389C300A5383B /* MessagesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C5433DC24C389C300A5383B /* MessagesView.swift */; };
1111
1C5433DF24C38DBF00A5383B /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C5433DE24C38DBF00A5383B /* SwiftUI.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
12+
1C5433E224C3A33600A5383B /* SwiftUIExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C5433E124C3A33600A5383B /* SwiftUIExampleView.swift */; };
1213
383B9EB32172A1C4008AB91A /* MockUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 383B9EB22172A1C4008AB91A /* MockUser.swift */; };
1314
385C2922211FF32E0010B4BA /* CustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 385C2920211FF32E0010B4BA /* CustomCell.swift */; };
1415
385C2923211FF32E0010B4BA /* TableViewCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = 385C2921211FF32E0010B4BA /* TableViewCells.swift */; };
@@ -75,6 +76,7 @@
7576
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>"; };
7677
1C5433DC24C389C300A5383B /* MessagesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessagesView.swift; sourceTree = "<group>"; };
7778
1C5433DE24C38DBF00A5383B /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
79+
1C5433E124C3A33600A5383B /* SwiftUIExampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIExampleView.swift; sourceTree = "<group>"; };
7880
2AC6E3F5C11E39F57598DBE6 /* Pods_ChatExampleUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ChatExampleUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
7981
383B9EB22172A1C4008AB91A /* MockUser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockUser.swift; sourceTree = "<group>"; };
8082
385C2920211FF32E0010B4BA /* CustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomCell.swift; sourceTree = "<group>"; };
@@ -147,12 +149,21 @@
147149
/* End PBXFrameworksBuildPhase section */
148150

149151
/* Begin PBXGroup section */
152+
1C5433E024C3A32400A5383B /* SwiftUI */ = {
153+
isa = PBXGroup;
154+
children = (
155+
1C5433DC24C389C300A5383B /* MessagesView.swift */,
156+
1C5433E124C3A33600A5383B /* SwiftUIExampleView.swift */,
157+
);
158+
path = SwiftUI;
159+
sourceTree = "<group>";
160+
};
150161
385C2924211FF3310010B4BA /* Views */ = {
151162
isa = PBXGroup;
152163
children = (
164+
1C5433E024C3A32400A5383B /* SwiftUI */,
153165
385C2920211FF32E0010B4BA /* CustomCell.swift */,
154166
385C2921211FF32E0010B4BA /* TableViewCells.swift */,
155-
1C5433DC24C389C300A5383B /* MessagesView.swift */,
156167
);
157168
path = Views;
158169
sourceTree = "<group>";
@@ -541,6 +552,7 @@
541552
files = (
542553
385C2922211FF32E0010B4BA /* CustomCell.swift in Sources */,
543554
385C2946211FF38F0010B4BA /* LaunchViewController.swift in Sources */,
555+
1C5433E224C3A33600A5383B /* SwiftUIExampleView.swift in Sources */,
544556
385C2939211FF37B0010B4BA /* Lorem.swift in Sources */,
545557
385C2928211FF33B0010B4BA /* MockMessage.swift in Sources */,
546558
385C2923211FF32E0010B4BA /* TableViewCells.swift in Sources */,

Example/Sources/View Controllers/LaunchViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ final internal class LaunchViewController: UITableViewController {
8989
navigationController?.pushViewController(MessageContainerController(), animated: true)
9090
case "SwiftUI Example":
9191
if #available(iOS 13, *) {
92-
navigationController?.pushViewController(UIHostingController(rootView: MessageViewPreviewWrapper()), animated: true)
92+
navigationController?.pushViewController(UIHostingController(rootView: SwiftUIExampleView()), animated: true)
9393
}
9494
case "Settings":
9595
navigationController?.pushViewController(SettingsViewController(), animated: true)

Example/Sources/Views/MessagesView.swift renamed to Example/Sources/Views/SwiftUI/MessagesView.swift

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ import MessageKit
1414
class MessageSwiftUIVC: MessagesViewController {
1515
override func viewDidAppear(_ animated: Bool) {
1616
super.viewDidAppear(animated)
17+
// Because SwiftUI wont automatically make our controller the first responder, we need to do it on viewDidAppear
1718
becomeFirstResponder()
19+
messagesCollectionView.scrollToBottom(animated: true)
1820
}
1921
}
2022

@@ -34,10 +36,10 @@ struct MessagesView: UIViewControllerRepresentable {
3436
}
3537

3638
func updateUIViewController(_ uiViewController: MessagesViewController, context: Context) {
37-
if !uiViewController.isFirstResponder {
38-
uiViewController.becomeFirstResponder()
39-
}
4039
uiViewController.messagesCollectionView.reloadData()
40+
DispatchQueue.main.async {
41+
uiViewController.messagesCollectionView.scrollToBottom(animated: true)
42+
}
4143
}
4244

4345
func makeCoordinator() -> Coordinator {
@@ -75,22 +77,3 @@ extension MessagesView.Coordinator: MessagesLayoutDelegate, MessagesDisplayDeleg
7577
avatarView.set(avatar: avatar)
7678
}
7779
}
78-
79-
@available(iOS 13.0.0, *)
80-
struct MessageViewPreviewWrapper: View {
81-
@State var messages = [MessageType]()
82-
var body: some View {
83-
MessagesView(messages: $messages).onAppear {
84-
SampleData.shared.getMessages(count: 20) { messages in
85-
self.messages.append(contentsOf: messages)
86-
}
87-
}
88-
}
89-
}
90-
91-
@available(iOS 13.0.0, *)
92-
struct MessagesView_Previews: PreviewProvider {
93-
static var previews: some View {
94-
MessageViewPreviewWrapper()
95-
}
96-
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//
2+
// ChatView.swift
3+
// ChatExample
4+
//
5+
// Created by Kino Roy on 2020-07-18.
6+
// Copyright © 2020 MessageKit. All rights reserved.
7+
//
8+
9+
import SwiftUI
10+
import MessageKit
11+
12+
@available(iOS 13.0, *)
13+
struct SwiftUIExampleView: View {
14+
@State var messages = [MessageType]()
15+
var body: some View {
16+
MessagesView(messages: $messages).onAppear {
17+
SampleData.shared.getMessages(count: 20) { messages in
18+
self.messages.append(contentsOf: messages)
19+
}
20+
MockSocket.shared.connect(with: [SampleData.shared.nathan, SampleData.shared.wu]).onNewMessage { message in
21+
self.messages.append(message)
22+
}
23+
}.onDisappear {
24+
MockSocket.shared.disconnect()
25+
}
26+
.navigationBarTitle("SwiftUI Example", displayMode: .inline)
27+
}
28+
}
29+
30+
@available(iOS 13.0.0, *)
31+
struct SwiftUIExampleView_Previews: PreviewProvider {
32+
static var previews: some View {
33+
SwiftUIExampleView()
34+
}
35+
}

0 commit comments

Comments
 (0)