У меня есть контроллер представления сообщений, который имеет InputAccessoryView. Проблема заключается в том, что когда я передаю (данные пользователя) в контроллер сообщений с моего первого контроллера представления, InputAccessoryView не показывает. Теперь, когда я передаю (данные пользователя) контроллеру сообщений из контроллера списка сообщений, отображает InputAccessoryView.InputAccessoryView Не отображается - Swift 3 Xcode 8.3 beta (Non storyBoard)
Вот контроллер сообщения:
class MessageViewController: UICollectionViewController, UITextFieldDelegate, UICollectionViewDelegateFlowLayout, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var user: User? {
didSet {
navigationItem.title = user?.first_name
}
}
override func viewDidLoad() {
super.viewDidLoad()
collectionView?.keyboardDismissMode = .interactive
setupKeyboardObservers()
}
lazy var inputContainerView: ChatInputContainerView = {
let chatInputContainerView = ChatInputContainerView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 50))
chatInputContainerView.newMessageViewController = self
return chatInputContainerView
}()
override var inputAccessoryView: UIView? {
get {
return inputContainerView
}
}
override var canBecomeFirstResponder : Bool {
return true
}
func setupKeyboardObservers() {
NotificationCenter.default.addObserver(self, selector: #selector(handleKeyboardDidShow), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
}
func handleKeyboardDidShow() {
if messages.count > 0 {
let indexPath = IndexPath(item: messages.count - 1, section: 0)
collectionView?.scrollToItem(at: indexPath, at: .top, animated: true)
}
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
NotificationCenter.default.removeObserver(self)
}
}
И список контроллер сообщения:
class MessageViewController: UITableViewController {
let user = User()
let newMessageViewController = NewMessageViewController(collectionViewLayout: UICollectionViewFlowLayout())
//Send user data to (newMessageViewController) and show newMessageViewController view controller
newMessageViewController.user = user
newMessageViewController.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(MessageViewController, animated: true)
}
Теперь, это работает отлично! Здесь проблема начинается. Первый контроллер представления имеет подчиненный объект, который отправляет (данные пользователя) через delagate в супервизор.
delegate?.sendBackToDrag(passBackFromBlur: user)
Затем метод sendBackToDrag представляет контроллер контроля blurPopOver.
func sendBackToDrag(passBackFromBlur: User) {
let blurPopOver = BlurPopOver()
blurPopOver.user = passBackFromBlur as User
blurPopOver.delegate = self
blurPopOver.modalPresentationStyle = .overFullScreen
present(blurPopOver, animated: false, completion: nil)
}
После представления blurPopOver он отправляет (данные пользователя) обратно в первый контроллер представления.
delegate?.sendBackToFind(passBackToFind: user)
Когда данные передаются через делегат, диспетчер отображения отображения сообщений.
func sendBackToFind(passBackToFind: User) {
let newMessageViewController = NewMessageViewController(collectionViewLayout: UICollectionViewFlowLayout())
newMessageViewController.user = passBackToFind
newMessageViewController.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(MessageViewController, animated: true)
}
Вот протоколы:
protocol MessageDelegateDrag {
func sendBackToDrag(passBackFromBlur: User)
}
protocol MessageDelegateFind {
func sendBackToFind(passBackToFind: User)
}
Теперь она работает, когда я передать (пользовательские данные) в так:
func sendBackToFind(passBackToFind: User) {
let user = User()
user.id = "user_id"
user.first_name = "user_first_name"
user.last_name = "user_last_name"
user.profile_image = "user_image_url"
let newMessageViewController = NewMessageViewController(collectionViewLayout: UICollectionViewFlowLayout())
newMessageViewController.user = user
newMessageViewController.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(MessageViewController, animated: true)
}
Похоже на добавление данных в качестве константы в методе sendBackToFind отлично работает.