0

Je travaille sur une application boursière dans laquelle je dois montrer quelques indices qui sont mis à jour en utilisant une connexion socket pendant les heures de marché dans la barre de navigation.Common UINavigationController avec vue personnalisée à travers l'application

Cette fonctionnalité est commune à tous les écrans de l'application.

J'ai sous-classé UINavigationController et conçu une vue dans le fichier .xib pour montrer les valeurs d'index dans viewDidLoad et l'a ajouté comme une sous-vue.

enter image description here

(J'utilise rapidement 3,1)

let width = self.view.frame.width - 100.0 
    let frame = CGRect(x: 50, y: 25, width: width, height: 44) 
    viewNavigation = NavigationView(frame: frame) 
    self.view.addSubview(viewNavigation!) 

Y at-il d'autres une meilleure façon d'obtenir cette fonctionnalité?

Répondre

0

Cela ne me semble pas mauvais.

Avoir votre window.rootViewController réglé comme UINavigationController est une bonne pratique que j'ai réellement. Il peut toujours contenir d'autres sous UINavigationController

Cependant, est-ce que votre NavigationView est à propos? Si vous ajoutez une sous-vue directement dans la propriété vue navigationController, ce n'est pas le comportement attendu et vous pouvez avoir un comportement non défini.

Suite à votre réponse édité et commentaires:

Oui, je pense que vous devriez utiliser UINavigationBar personnalisée titleView. Vous pouvez facilement régler dans différents viewController ou une fois:

self.navBar.topItem?.titleView = NavigationView(frame: frame)

+0

dois-je l'ajouter à la barre de navigation au lieu du contrôleur de navigation? – iAnurag

+0

Où souhaitez-vous afficher les informations? autour du titre de navigationBar NavigationController? – Lifely

+0

J'ai édité la question ... s'il vous plaît vérifier – iAnurag

0

Je pense que vous pouvez créer la sous-classe UIViewController et la méthode add pour afficher et masquer ou modifier les valeurs. S'il vous plaît voir l'exemple.

BaseViewControler est une sous-classe sur UIViewController

Sur votre BaseViewController écrire une méthode comme suit

func addNavigationTitileView() { 
    // add your code to show your value 
    } 

appellent maintenant le dans votre viewWillAppear

override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     addNavigationTitileView() 
    } 

Maintenant, vous devez créer votre vue contrôleurs sous-classe BaseViewController. il ajoute automatiquement la barre de navigation avec les changements.

Pour votre exemple mieux changer navigationTitleView

Disons que vous voulez afficher la valeur dynamique sur la barre de navigation. En utilisant la méthode ci-dessus, il sera facile de mettre à jour chaque fois que vous allez aux contrôleurs de vue.

Maintenant Pensez que vous ne voulez pas ajouter que pour un contrôleur de vue, vous êtes deux options.

  1. Créer View Controller sans sous-classement BaseViewController.
  2. Créer la même méthode sur votre contrôleur (override) et la méthode doit être vide.

Si vous voulez changer en temps réel de texte que vous devez utiliser le besoin d'utiliser NSNotificationCenter addObserver Voir Notification center method method called multiple time ios in Tab bar (View controller)? How to remove observer?

Pour mettre en œuvre comme ça, Vous devez vous inscrire Observer la méthode baseviewController viewWillAppear et retirez la méthode viewWillDisappear .

La méthode Observer vous permet de définir les valeurs que vous souhaitez afficher.

+0

Cette approche consomme beaucoup de mémoire .. c'est déjà en place .. Je suis à la recherche d'une alternative..Merci – iAnurag