Swift: как выполнить действие при нажатии UITabBarItem
В настоящее время у меня есть контроллер панели вкладок, который подключен к контроллеру таблицы. Я пытаюсь перейти в верхнюю часть таблицы, когда я нажимаю элемент панели вкладок. Я знаю, как добраться до верхней части таблицы. Я просто не знаю, как сделать действие, когда элемент нажат.
Ответы
Ответ 1
Вы должны использовать UITabBarDelegate
с помощью метода didSelectItem
. Используйте его как любой стандартный делегат:
class yourclass: UIViewController, UITabBarDelegate {
func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
//This method will be called when user changes tab.
}
}
И не забудьте установить делегат панели вкладок в self
в диспетчере вида.
Ответ 2
Вот ответ на этот вопрос
В основном вы делаете это:
- Убедитесь, что ваш контроллер представления подписан на UITabBarDelegate
- Установить теги в IB для каждого элемента панели вкладок
-
Реализуйте метод didSelectItem, что-то вроде этого:
-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
if(item.tag == 1) {
// Code for item 1
}
else if(item.tag == 2) {
// Code for item 2
}
}
Это даст вам доступ к каждому событию с вкладкой. Надеюсь, поможет!
В Свифте:
func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
if(item.tag == 1) {
// Code for item 1
} else if(item.tag == 2) {
// Code for item 2
}
}
Ответ 3
SWIFT 3
class yourclass: UIViewController, UITabBarDelegate {
func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
print("Test")
}
}
И не забудьте указать свой делегат tabBar для себя в viewDidLoad
override func viewDidLoad(){
super.viewDidLoad()
<YOUR TAB BAR NAME>.delegate = self
}
Ответ 4
У меня были проблемы с реализацией других ответов здесь. Это более полный ответ. Предполагается, что вы используете UITabBarController
(по умолчанию, если вы создаете новое приложение с вкладками). Это решение будет печатать сообщение каждый раз, когда нажимается кнопка вкладки контроллера вида.
![enter image description here]()
Код
Создайте новый файл Swift с именем MyTabBarController.swift. Вставьте следующий код.
import UIKit
class MyTabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// tell our UITabBarController subclass to handle its own delegate methods
self.delegate = self
}
// called whenever a tab button is tapped
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if viewController is FirstViewController {
print("First tab")
} else if viewController is SecondViewController {
print("Second tab")
}
}
}
Интерфейсный Разработчик
На раскадровке выберите контроллер панели вкладок. Затем в инспекторе удостоверений установите имя класса MyTabBarController
(то есть имя класса в приведенном выше коде).
![enter image description here]()
Все это. Вы можете запустить свое приложение сейчас и получать уведомления, когда пользователь касается элемента панели вкладок.
Заметки
-
Если вам нужно запустить метод на кране, то вы можете сделать что-то вроде следующего в методе didSelect
.
if let firstVC = viewController as? FirstViewController {
firstVC.doSomeAction()
}
-
Вы можете сделать так, чтобы FirstViewController
реализовал делегат и обрабатывал там все. Таким образом, вам не нужно создавать какой-либо пользовательский подкласс UITabBarController
и устанавливать его в IB. Тем не менее, когда ребенок выполняет родительскую работу, это кажется неправильным местом для этого. Во всяком случае, вот это:
class FirstViewController: UIViewController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
tabBarController?.delegate = self
}
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
// ...
}
}
didSelect
метод didSelect
независимо от того, какая вкладка нажата.
-
UITabBarControllerDelegate
документация
Ответ 5
Альтернативное решение состоит в том, чтобы просто что-то сделать в viewDidAppear
в любом из View Controller, который отображается на вкладке.
Первый контроллер представления таблиц
import UIKit
class FirstViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("First tab")
}
}
Второй контроллер просмотра вкладки
import UIKit
class SecondViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("Second tab")
}
}