diff --git a/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift b/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift index ffffd777c..06b632196 100644 --- a/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift +++ b/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift @@ -625,6 +625,12 @@ struct ConversationFragment: View { HStack(spacing: 0) { if !voiceRecordingInProgress { Button { + isMessageTextFocused = true + DispatchQueue.main.async { + if let inputView = UIResponder.currentFirstResponder() as? UITextField { + inputView.inputView = inputView.inputView + } + } } label: { Image("smiley") .renderingMode(.template) @@ -635,6 +641,15 @@ struct ConversationFragment: View { .padding(.top, 4) } .padding(.horizontal, isMessageTextFocused ? 0 : 2) + .onChange(of: isMessageTextFocused) { focused in + if focused { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + if let inputView = UIResponder.currentFirstResponder() as? UITextField { + inputView.inputView = UIInputView(frame: CGRect.zero, inputViewStyle: .keyboard) + } + } + } + } Button { self.isShowPhotoLibrary = true @@ -1361,6 +1376,21 @@ struct VoiceRecorderPlayer: View { timer = nil } } + +extension UIResponder { + private static weak var _currentFirstResponder: UIResponder? + + static func currentFirstResponder() -> UIResponder? { + _currentFirstResponder = nil + UIApplication.shared.sendAction(#selector(findFirstResponder), to: nil, from: nil, for: nil) + return _currentFirstResponder + } + + @objc private func findFirstResponder() { + UIResponder._currentFirstResponder = self + } +} + /* #Preview { ConversationFragment(conversationViewModel: ConversationViewModel(), conversationsListViewModel: ConversationsListViewModel(), sections: [MessagesSection], ids: [""])