У меня есть три представления в navigationBar.
Я хочу разместить ярлыки на панели навигации, чтобы при переходе от одного представления к другому отображался номер страницы. Вот мой код. Я написал этот код в 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» в каждом контроллере представления *
Нет, ViewController с контроллером навигации
И вы просто переходите от первого ViewController ко второму, а со второго к третьему?
да . с первого на второй и со второго на третий





Сначала создайте подкласс UINavigationController
class NavigationController: UINavigationController {
}
не забудьте изменить класс вашего 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"
}
}
тогда вы хотите менять 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"
}
}
}
...
Привет, Роберт, я сделал, как ты предлагаешь. но почему этикетка не отображается. Я что-то делаю неправильно?
@Tapan Мне очень жаль, я только что обновил свой ответ. В подклассе NavigationController в viewDidLoad я забыл добавить подпредставления в navigationBar
Что ты используешь?
UIPageViewController?