#ios #swift #xcode #programmatically
#iOS #swift #xcode #программно
Вопрос:
Недавно я работал над программным созданием своего приложения, и я столкнулся с ошибкой, когда контроллер панели вкладок также создает контроллер навигации (который я хочу для каждой страницы), однако я изо всех сил пытаюсь найти способ добавить кнопку на панель, например, кнопку «Готово» ввверху справа, от самого ViewController — не контроллера панели вкладок.
По сути, я пытаюсь добавить кнопку отправки, которая будет выполнять действие, объявленное в ViewController, однако единственный способ, который я нашел, — это либо создать контроллер навигации индивидуально в каждом контроллере представления, что было бы менее эффективным, либо добавить кнопку в контроллер панели вкладок, но это означало бы копированиефункция (которая специфична для других элементов на странице контроллера просмотра) в контроллер панели вкладок, что было бы кошмаром.
Это код на контроллере — newReportScreen в функции viewDidLoad
//setting the nav bar submit button
let navBar = UINavigationBar()
view.addSubview(navBar)
let submitItem = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(SubmitButtonTouched))
let navItem = UINavigationItem(title: "Submit")
navItem.rightBarButtonItem = submitItem
navBar.setItems([navItem], animated: false)
что противоречит коду в контроллере панели вкладок
//setting up the variable for the first view controller which will be used for the tab bar
let firstViewController = MapVC()
//set the nav title
firstViewController.title = "Home"
//initialising the first tab bar item, which will have the title of Home, the image named below and the tag number, showing the position on the bar
firstViewController.tabBarItem = UITabBarItem(title: "Home", image: UIImage(named: "Home.png"), tag: 0)
//initialising the second of the view controllers which will be used to access from the tab bar controller
let secondViewController = localReportsTVC()
//set the nav title
secondViewController.title = "Local Reports"
//setting the second view controller on the tab bar and giving it a title, image and location on the bar
secondViewController.tabBarItem = UITabBarItem(title: "Local Reports", image: UIImage(named: "Local.png"), tag: 1)
//setting up the third view controller to be referenced on the tab bar controller
let thirdVC = NewReportScreen()
//set the nav title
thirdVC.title = "New Report"
//setting the third view conteroller to be on the tab bar with the image, name and the location on the bar in relation to the other items
thirdVC.tabBarItem = UITabBarItem(title: "New Report", image: UIImage(named: "Plus Icon.png"), tag: 2)
//setting up the third view controller to be referenced in the tab bar controller
let fourthVC = MyReportsTVC()
//set the nav title
fourthVC.title = "My Reports"
//setting the third item on the tab bar up so that it has a position, image and title
fourthVC.tabBarItem = UITabBarItem(title: "My Reports", image: UIImage(named: "MyReports.png"), tag: 3)
//setting up the fifth section of the tab bar, where it will be referenced later
let fithVC = SettingsScreen()
//set the nav title
fithVC.title = "Settings"
//setting up the fifth item, so that it has a title, image and position on the bar
fithVC.tabBarItem = UITabBarItem(title: "Settings", image: UIImage(named: "Settings Icon.png"), tag: 4)
//initialising the final tab bar wih all of the elements from above
let tabBarList = [firstViewController, secondViewController, thirdVC, fourthVC, fithVC]
//setting the view controllers equal to the tab bar list defined above - also adding in the navigation controller to each of the tabs so that they have a title and also a navigation controller to add the back button in
viewControllers = tabBarList.map { UINavigationController(rootViewController: $0)}
Возможно, я слишком много думаю об этом, но я изо всех сил пытался обойти это, так что любая помощь будет очень признательна!
Ответ №1:
При создании UITabBar вы уже добавляете UINavigationController.
viewControllers = tabBarList.map { UINavigationController(rootViewController: $0)}
Это правильно.
Затем в каждом контроллере представления вы можете установить его элементы панели навигации navigationItem
с помощью свойства UIViewControllers:
//setting the nav bar submit button
let submitItem = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(SubmitButtonTouched))
self.navigationItem.rightBarButtonItem = submitItem
выполнение этого в viewDidLoad
правильно.