Метки на панели навигации в Swift - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть три представления в навигационной панели.

Я хочу разместить метки на панели навигации, чтобы при переходе к одному представлению в другом отображался номер страницы.Вот мой код.Я написал этот код в ViewDidLoad всех трех классов

     if let navigationBar = self.navigationController?.navigationBar {

        let firstFrame = CGRect(x: navigationBar.frame.width/2, y: 8, width: 15, height: 10)

        let secondFrame = CGRect(x: navigationBar.frame.width/2 + 30, y: 8, width: 15, height: 10)

        let thirdFrame = CGRect(x: navigationBar.frame.width/2 + 60, y: 8, width: 15, height: 10)

        let firstLabel = UILabel(frame: firstFrame)
        firstLabel.text = "1"

        let secondLabel = UILabel(frame: secondFrame)
        secondLabel.text = "of"
        let thirdLabel = UILabel(frame: thirdFrame)
        secondLabel.text = "3"

        navigationBar.addSubview(firstLabel)
        navigationBar.addSubview(secondLabel)
        navigationBar.addSubview(thirdLabel)
    }

Но проблема в том, что одна и та же метка повторяется в каждом контроллере представления. Она отображается как "1 из 3" в каждом контроллере представления *

1 Ответ

0 голосов
/ 23 ноября 2018

Сначала создайте подкласс UINavigationController

class NavigationController: UINavigationController {
}

Не забудьте изменить класс вашего UINavigationController в раскадровке

enter image description here

теперь в вашем подклассе UINavigationController создайте свойства ваших ярлыков и установите их

class NavigationController: UINavigationController {

    var firstLabel: UILabel?
    var secondLabel: UILabel?
    var thirdLabel: UILabel?

    override func viewDidLoad() {
        super.viewDidLoad()
        firstLabel = UILabel(frame: CGRect(x: navigationBar.frame.width/2, y: 8, width: 15, height: 10))
        secondLabel = UILabel(frame: CGRect(x: navigationBar.frame.width/2 + 30, y: 8, width: 15, height: 10))
        thirdLabel = UILabel(frame: CGRect(x: navigationBar.frame.width/2 + 60, y: 8, width: 15, height: 10))
        navigationBar.addSubview(firstLabel)
        navigationBar.addSubview(secondLabel)
        navigationBar.addSubview(thirdLabel)
        firstLabel.text = "1"
        secondLabel.text = "of"
        thirdLabel.text = "3"
    }
}

, затем вы захотите менять firstLabel.text каждый раз, когда переходите к другому ViewController.Итак, во ViewController в viewWillAppear получите ссылку для вашего NavigationController и установите текст этого firstLabel следующим образом

class ViewController1: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
        if let navController = navigationController as? NavigationController {
            navController.firstLabel?.text = "1"
        }
    }
}

, а затем сделайте то же самое для второго и третьего UIViewController

class ViewController2: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
        if let navController = navigationController as? NavigationController {
            navController.firstLabel?.text = "2"
        }
    }
}

...
...