Closed InesBokri closed 6 years ago
Bonjour @katasskatouss ,
Il faut utiliser :
dimeloViewController!.becomeFirstResponder()
lors de la fermeture de Drawer et l'affichage de Chat et
if dimeloViewController != nil {
view.endEditing(true)
dimeloViewController?.view.endEditing(true)
}
lors de l'ouverture de Drawer(lorsque vous voulez quitter le Chat)
Bonjour,
Est il possible de me préciser svp c'est quoi cette variable "dimeloViewController" ?
Bonjour,
C'est la vue de Chat.
var dimeloViewController: UIViewController? = nil
dimeloViewController = dimelo!.chatViewController()
Bonjour wael,
Je tiens à te remercier pour ta réactivité habituelle mais melheuresement ca ne marche toujours pas : (
Au fait, dans notre appli on a un viewController: contactVC qui contient un subview de dimelo je ne sais pas si cette information peut t'aider?
Bonjour @katasskatouss ,
Le subview de Dimelo est déclaré comment exactement avant de l'ajouter à votre contactVC
?
Wael,
j'ai l'interface de contactVC qui contient un container view (qui est le dimeloVC). Du coup dimeloVC , voila son code
import Dimelo
class DimeloViewController: UIViewController, DimeloDelegate {
var dimelo: Dimelo?
var tabChatVC: UIViewController?
var unreadUpdateTimer: Timer?
var unreadFetchInterval: TimeInterval = 0.0
var defaultUnreadFetchInterval: TimeInterval = 5
let viewModel = ContactViewModel()
override func viewDidLoad() {
super.viewDidLoad()
self.setupDimelo()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.setupDimelo()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.setupDimelo()
}
// DimeloDelegate
func dimeloDisplayChatViewController(_ dimelo: Dimelo!) {
let vc: UIViewController? = Dimelo.sharedInstance().chatViewController()
vc?.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(self.closeChat))
if UIDevice.current.userInterfaceIdiom == .pad {
vc?.modalPresentationStyle = .formSheet
}
vc?.modalPresentationStyle = .overCurrentContext
self.present(vc!, animated: true, completion: {() -> Void in
})
}
@IBAction func closeChat(_ sender: Any) {
self.dismiss(animated: true, completion: {() -> Void in
})
}
func setupDimelo() {
dimelo = Dimelo.sharedInstance().copy() as? Dimelo
dimelo?.delegate = self
dimelo?.developmentAPNS = false
dimelo?.updateAppBadgeNumber = true
dimelo?.interactiveNotification = true
dimelo?.noteUnreadCountDidChange()
dimelo?.title = " "
dimelo?.userIdentifier = viewModel.refBp.value
dimelo?.authenticationInfo = ["reference_client": viewModel.refBp.value,
"nom": viewModel.lastname.value,
"prenom": viewModel.firstname.value,
"email": viewModel.email.value,
"telephone_mobile": viewModel.phone.value]
let dimeloViewController = dimelo!.chatViewController
dimeloViewController().navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(self.closeChat))
addChildViewController(dimeloViewController())
dimeloViewController().view.frame = CGRect.init(origin: view.frame.origin, size: view.frame.size)
view.addSubview(dimeloViewController().view)
dimeloViewController().didMove(toParentViewController: self)
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// Register the device token.
Dimelo.sharedInstance().deviceToken = deviceToken
}
func dimeloDidBeginNetworkActivity(_ dimelo: Dimelo?) {
UIApplication.shared.isNetworkActivityIndicatorVisible = true
}
func dimeloDidEndNetworkActivity(_ dimelo: Dimelo?) {
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
//! If notification is from Dimelo, you don't have to handle anything
if Dimelo.sharedInstance().consumeReceivedRemoteNotification(userInfo) {
return
}
}
func application(_ application: UIApplication, didReceive notification: UILocalNotification) {
//! We simulate remote notification by putting its payload into a local notification.
if Dimelo.sharedInstance().consumeReceivedRemoteNotification(notification.userInfo) {
return
}
//! You app's handling of this notification.
}
func application(_ application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [AnyHashable : Any], withResponseInfo responseInfo: [AnyHashable : Any], completionHandler: @escaping () -> Void) {
Dimelo.sharedInstance().handleRemoteNotification(withIdentifier: identifier, responseInfo: responseInfo)
if completionHandler != nil {
completionHandler()
}
//! Otherwise, here you app's handling of this notification.
}
func updateBadge(withUnreadCount count: Int) {
tabChatVC?.tabBarItem.badgeValue = count > 0 ? "\(count)" : nil
}
func updateUnreadCount() {
unreadUpdateTimer?.invalidate()
Dimelo.sharedInstance().fetchUnreadCount(completionHandler: {(_ unreadCount: Int, _ error: Error?) -> Void in
if unreadCount == NSNotFound {
print("error while updating unreadCount : \(error ?? "" as! Error)")
if (error as NSError?)?.domain == DimeloHTTPErrorDomain && (error as NSError?)?.code == 429 {
// 429 Too many requests. Be nice, add some delay.
self.unreadFetchInterval += self.defaultUnreadFetchInterval
}
} else {
self.updateBadge(withUnreadCount: unreadCount)
}
self.scheduleUnreadCountUpdateTimer()
})
}
func scheduleUnreadCountUpdateTimer() {
unreadUpdateTimer?.invalidate()
unreadUpdateTimer = Timer.scheduledTimer(timeInterval: unreadFetchInterval, target: self, selector: #selector(self.updateUnreadCount), userInfo: nil, repeats: false)
}
func dimeloUnreadCountDidChange(_ notification: Notification?) {
updateBadge(withUnreadCount: Dimelo.sharedInstance().unreadCount)
scheduleUnreadCountUpdateTimer()
}
}
Bonjour,
Vous pouvez ajouter une NotificationCenter
pour cacher le clavier en appuyant sur l'icône de Menu et une autre en fermant le menu pour afficher le clavier:
Dans DimeloViewController :
var dimeloViewController: UIViewController? = nil
func setupDimelo() {
dimeloViewController = dimelo!.chatViewController()
}
override func viewDidLoad() {
super.viewDidLoad()
self.setupDimelo()
NotificationCenter.default.addObserver(self, selector: #selector(DimeloViewController.closeKeyboard), name: NSNotification.Name(rawValue: "closeKeyboard"), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(DimeloViewController.openKeyboard), name: NSNotification.Name(rawValue: "openKeyboard"), object: nil)
}
@objc func openKeyboard() {
dimeloViewController!.becomeFirstResponder()
}
@objc func closeKeyboard() {
view.endEditing(true)
dimeloViewController?.view.resignFirstResponder()
}
en appuyant sur bouton de Menu:
view.endEditing(true)
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "closeKeyboard"), object: nil)
en appuyant sur Nous Contacter:
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "openKeyboard"), object: nil)
Pouvez vous tester ça ?
Bonjour,
Je visn d'intégrer ce que vous m'avez passé. Mais ca marche toujours pas!
Au fait lorsque je suis dans la page contact (là ou il y a dimelo) et par la suite je clique sur le buttton menu pour ouvrir le Menu alors le clavier ca se cache (ça c'est bien) Mais lorsque je clique sur le button contact (dans le menu) pour revenir a la page contact, je trouve pas le clavier!!
Bonjour @katasskatouss ,
Je viens de créer un exemple de code sur mesure dont vous pouvez vous inspirer pour résoudre votre souci d'accès au clavier sur votre application iOS (j'ai suivi votre architecture).
Bonjour,
Je vais tester et je vous met au courant.
Merci @waelbenabdallah
Re bonjour,
Ca marche toujours pas! Meme comportement: lorsque j'ouvre le menu, le clavier se cache mais lorsque je reviens je trouve pas le clavier!
Bonjour Wael,
C'est bon j'ai trouvé la solution. C'était avec la notification comme l'exemple que tu m'as fourni mais j'ai ajouté le setupDimelo() dans les 2 fonctions Open and close keyboard.
Merci pour ta réactivité.
A bientot peut etre :)
Bonjour @katasskatouss,
Super 👍
Bonjour,
Comme c'est déjà vu avant, le probleme persiste encore et ce n'est pas résolu encore!
A partir du menu, j'appel une interface qui cintient dimelo, lorsque l'utilisateur saisie son message et ouvre encore une fois le menu, le clavier ne se cache pas. Vous m'avez dit d'ajouter view.endEditing(true) mais dans ce cas (c'est que le clavier se cache à l'ouverture de menu) mais je perds l'accés au clavier a mon retour a l'interface de Dimelo.