홈>
간단한 메시징 응용 프로그램을 구현하려고하는데
MessageInputBarDelegate
메소드가 실행되지 않습니다. MessagesDisplayDelegate와 같은 다른 확장 프로그램이 예상대로 실행되는 것 같습니다.
Swift 4.4.2를 사용하고 있습니다
포드 파일 :
use_frameworks!
target 'm-v0.01' do
pod 'Socket.IO-Client-Swift', '~> 15.1.0'
pod 'Alamofire', '~> 5.0.0-beta.5'
pod 'MessageKit'
# pod 'MessageInputBar'
# pod 'MessageInputBar', :git => 'https://github.com/MessageKit/MessageInputBar.git', :branch => 'master'
end
로그인 용 컨트롤러와 메시지 표시 용 컨트롤러 두 개가 있습니다 :
ViewController : (로그인 용)
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var loginValue: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.destination is MViewController
{
let vc = segue.destination as? MViewController
vc?.text = loginValue.text!
}
}
@IBAction func loginAction(_ sender: UIButton!) {
print("Entered Text" , loginValue.text)
performSegue(withIdentifier: "view2", sender: self)
}
}
MViewController (메시지 표시 용) :
import UIKit
import SocketIO
import Alamofire
import MessageKit
extension MViewController: MessagesLayoutDelegate {
func heightForLocation(message: MessageType,
at indexPath: IndexPath,
with maxWidth: CGFloat,
in messagesCollectionView: MessagesCollectionView) -> CGFloat {
return 0
}
}
extension MViewController: MessagesDisplayDelegate {
func configureAvatarView(
_ avatarView: AvatarView,
for message: MessageType,
at indexPath: IndexPath,
in messagesCollectionView: MessagesCollectionView) {
let message = messages[indexPath.section]
let color = message.member.color
avatarView.backgroundColor = color
print("MessagesDisplayDelegate")
}
}
extension MViewController: MessageCellDelegate {
func didTapAvatar(in cell: MessageCollectionViewCell) {
print("Avatar tapped")
}
func didTapMessage(in cell: MessageCollectionViewCell) {
print("Message tapped")
}
func didTapCellTopLabel(in cell: MessageCollectionViewCell) {
print("Top cell label tapped")
}
func didTapMessageTopLabel(in cell: MessageCollectionViewCell) {
print("Top message label tapped")
}
func didTapMessageBottomLabel(in cell: MessageCollectionViewCell) {
print("Bottom label tapped")
}
func didTapAccessoryView(in cell: MessageCollectionViewCell) {
print("Accessory view tapped")
}
}
extension MViewController: MessageInputBarDelegate {
func messageInputBar(_ inputBar: MessageInputBar, didPressSendButtonWith text: String) {
print("here")
}
func messageInputBar(_ inputBar: MessageInputBar, textViewTextDidChangeTo text: String) {
print("changed")
}
}
extension MViewController: MessagesDataSource {
func currentSender() -> SenderType {
return Sender(id: member.name, displayName: member.name)
}
func numberOfSections(
in messagesCollectionView: MessagesCollectionView) -> Int {
return messages.count
}
func messageForItem(
at indexPath: IndexPath,
in messagesCollectionView: MessagesCollectionView) -> MessageType {
return messages[indexPath.section]
}
func messageTopLabelHeight(
for message: MessageType,
at indexPath: IndexPath,
in messagesCollectionView: MessagesCollectionView) -> CGFloat {
return 12
}
func messageTopLabelAttributedText(
for message: MessageType,
at indexPath: IndexPath) -> NSAttributedString? {
return NSAttributedString(
string: message.sender.displayName,
attributes: [.font: UIFont.systemFont(ofSize: 12)])
}
}
class MViewController: MessagesViewController{
var text:String = ""
var messages: [Message] = []
var member: Member!
override func viewDidLoad() {
super.viewDidLoad()
messagesCollectionView.messagesDataSource = self
messagesCollectionView.messagesLayoutDelegate = self
messagesCollectionView.messagesDisplayDelegate = self
messagesCollectionView.messageCellDelegate = self
messageInputBar.delegate = self
}
}
많은 튜토리얼과 문서를 보았으며 사용자가 텍스트를 보내거나 텍스트를 변경할 때 발생하는 메소드에 액세스하는 것으로 지속적으로 문서화되어 있습니다 :
func messageInputBar(_ inputBar: MessageInputBar, didPressSendButtonWith text: String) {
print("here")
}
func messageInputBar(_ inputBar: MessageInputBar, textViewTextDidChangeTo text: String) {
print("changed")
}
메시지 리스너의 실행을 방해하는 메시지를 보내는 방법에서 무언가를 생략 했습니까?
포드 라이브러리'MessageInputBar'
가 있습니다
이것도 활용해야합니까? 코드가 컴파일 될 때 이것을 필요로하지 않는 것 같습니다.
업데이트 :
messagesCollectionView에서 델리게이트를 설정하려고했습니다 :
messagesCollectionView.delegate = self as MessageInputBarDelegate as? UICollectionViewDelegate
그러나 같은 결과 : send 이벤트가 발생하지 않습니다.
-
답변 # 1
-
답변 # 2
다른 MessageKit 버전을 사용해야했습니다.
pod 'MessageKit' , '1.0.0'
관련 질문
- Xcode/iOS - xcode/ios - cfbundlealternateicons 변경되지 않음
- swift - SPM 패키지를 사용할 때 iOS 앱을 iTunes Connect에 제출할 수 없습니다
- iPhone is not available. Please reconnect the device. / iOS 14.2 - iphone을 사용할 수 없습니다 장치를 다시 연결하십시오/ios 142 - xcode 121
- ios - LazyVGrid의 SwiftUI NavigationLink에서 임의 인덱스 선택
- ios - Userdefaultrs에서 복원되는 삭제 된 작업을 수정하는 방법
- ios - Xcode가 빌드 단계에서 스크립트 실행을 강제로 실행하는 방법
- ios - fscalendar에서 이벤트를 큰 색 원으로 표시하는 방법 - 빠른?
- swift - 실제 장치에서 PDF를 선택할 때 iOS 문서 선택기가 충돌 함
- swift - Mac의 Xcode에서 iOS 시뮬레이터를 실행하는 동안 오류가 발생했습니다
- xcode - Google MLKit cocoapods를 사용한 iOS Ad-hoc 배포
댓글의 정보를 보면 메시지 표시 줄에 콘센트가 없으며 viewController에 대리자가 설정되어 있지 않다고 가정합니다.
이를 위해 컨트롤러는viewDidLoad
에서 그것을 sese하려고 :MessagesViewController
를 서브 클래 싱해야합니다. 귀하의 상황에서 변경됩니다to :