【问题标题】:Labels on navigationbar in swiftswift中导航栏上的标签
【发布时间】:2018-11-23 19:35:54
【问题描述】:

我在导航栏中有三个视图。

我想在导航栏上放置标签,这样当我从一个视图转到另一个视图时,它会显示页码。这是我的代码。我在所有三个类的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 of 3”*

【问题讨论】:

  • 你在用什么? UIPageViewController?
  • 不,带导航控制器的 ViewController
  • 你只是从第一个 ViewController 到第二个,从第二个到第三个?
  • 是的。第一到第二和第二到第三

标签: ios swift controller navigation


【解决方案1】:

首先创建 UINavigationController 的子类

class NavigationController: UINavigationController {
}

不要忘记在 Storyboard 中更改 UINavigationController 的类别

现在在您的 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"
    }
}

那么你想在每次移动到另一个 ViewController 时更改 firstLabel.text。因此,在 viewWillAppear 的 ViewController 中获取您的 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"
        }
    }
}

...

【讨论】:

  • 嗨罗伯特,我已经按照你的建议做了。但为什么标签没有显示。我做错什么了吗?
  • @Tapan 对不起,我刚刚更新了我的答案。在 viewDidLoad 的 NavigationController 子类中,我忘记将子视图添加到 navigationBar
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
相关资源
最近更新 更多