Подтвердить что ты не робот

Swift: как выполнить действие при нажатии UITabBarItem

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

4b9b3361

Ответ 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")
    }
}