MISE À JOUR:Swift 3 - délégué retourne toujours une valeur nulle
J'ai conçu tabBar personnalisé à l'aide des boutons. J'ai 3 onglets, Premier onglet a Messages icône, Deuxième a Le profil icône et la troisième a Photos icône. Pour le bouton du troisième onglet, j'ai utilisé uiCollectionView()
où j'ai besoin de définir des images.
Pour le ViewController du troisième onglet, il y a une condition que je dois vérifier, avant de changer le title
du premier bouton de tabulation. Si messages
JSON tableau n'est pas vide puis définir le titre "nouveau message" sur le premier bouton de l'onglet, sinon l'icône Messages ne changera pas.
Il y a un ParentTabViewController qui a ces 3 onglets, j'ai utilisé uiView, où je change le contenu en fonction des boutons de tabulation pressés. J'ai essayé d'accéder aux valeurs du 3ème onglet dans ParentTabViewController en utilisant le délégué, mais le délégué est toujours nul. Je l'ai fait comme ceci:
class ParentTabViewController: UIViewController,MessageDelegateProtocol{
@IBOutlet weak var contentView: UIView!
@IBOutlet var tabBarButtons : [UIButton]!
@IBOutlet weak var firstTabButton: UIButton!
var MessageVC : UIViewController!
var ProfileVC : UIViewController!
var PhotosVC : UIViewController!
var viewControllers : [UIViewController]!
var message : String!
var selectedIndex:Int = 0
var photoVC = PhotosVC()
override func viewDidLoad() {
super.viewDidLoad()
photoVC.newMessageDelegate = self
let storyBoard = UIStoryboard(name:"Main", bundle:nil)
MessageVC = storyBoard.instantiateViewController(withIdentifier: "messagevc")
ProfileVC = storyBoard.instantiateViewController(withIdentifier: "profile")
PhotosVC = storyBoard.instantiateViewController(withIdentifier: "photos")
viewControllers = [MessageVC, ProfileVC, PhotosVC]
tabBarButtons[selectedIndex].isSelected = true
didPressTabs(tabBarButtons[selectedIndex])
}
@IBAction func didPressTabs(_ sender: UIButton)
{
let previousIndex = selectedIndex
selectedIndex = sender.tag
tabBarButtons[previousIndex].isSelected = false
let previousVC = viewControllers[previousIndex]
previousVC.willMove(toParentViewController: nil)
previousVC.removeFromParentViewController()
previousVC.view.removeFromSuperview()
sender.isSelected = true
let presentVC = viewControllers[selectedIndex]
addChildViewController(presentVC)
presentVC.view.frame = contentView.bounds
contentView.addSubview(presentVC.view)
presentVC.didMove(toParentViewController: self)
if selectedIndex == 2{ // this is what I thought of doing.Correct me if wrong.
// check the condition
// if messagesArray != nil
// set the first tab title "new message"
}
else{
// do not change the button image
}
}
func sendMessage(message : String)
{
self.message = message
print("message........", self.message, "\n\n")
}
}
Voici le contrôleur View pour la 3ème onglet:
import UIKit
protocol MessageDelegateProtocol:class {
func sendMessage(message : String)
}
class PhotosVC: UIViewController,UICollectionViewDataSource, UICollectionViewDelegate{
@IBOutlet weak var collectionView: UICollectionView!
var userMessageArray = [UserMessageClass]() // array of model class
var newMessage : String!
weak var newMessageDelegate : MessageDelegateProtocol?
override func viewDidLoad() {
super.viewDidLoad()
collectionView.delegate = self
collectionView.dataSource = self
loadData() // function to get json reponse
}
// implement collectionView delegate and dataSource methods
func getData(newMsg : UserMessageClass) //func to get values from model class
{
newMessage = newMsg.messageString // here I get the "new message" String
newMessageDelegate?.sendMessage(message: newMessage)
} enter code here
func loadData()
{
// get json response. And pass the payload to UserMessageClass using that class's array
userMessageArray.append(UserMessageClass(dict : jsonData))
var msgData = UserMessageClass(dict: jsonData)
getData(alarm: msgData)
}
}
J'ai essayé de chercher beaucoup sur l'accès à boutons de l'onglet dans un autre VC, mais n'a pas trouvé tout à proximité approche en tant que telle. Aussi je ne suis pas capable de comprendre pourquoi le délégué est toujours nul. Suggestions ou aide serait reconnaissant. Merci beaucoup :)
Salut, Pouvez-vous s'il vous plaît montrez-moi comment le faire par délégué. Parce que ParentViewController, est chargé en premier et en ce que 'MessagesVC()' est le premier onglet. Lorsque je clique sur le 3ème onglet, et que je vérifie si le tableau json de 'messages' n'est pas nul, définissez le titre sur le 1er onglet. J'ai pensé à vérifier la condition dans ParentVC, 'si selectedIndex == 2 {// faire la vérification}' et ensuite définir le titre ici. Mais je n'ai pas réussi à obtenir les valeurs de MessagesVC dans ParentVc. devenir toujours nul. J'ai essayé par délégué mais j'ai échoué –
Pouvez-vous télécharger votre projet sur github? – Rishab
Salut, j'ai mis à jour la question. S'il vous plaît vérifier et suggérer ce qui ne va pas –