How to enable control of tab bar item in UITabBarController (UITabBarController tab bar item 선택 가능 제어)
UITabBarController를 사용하는데
특정 조건에서 특정 탭이 클릭은 되지만,
페이지가 넘어가지 않고
다른 액션을 실행하고 싶을때가 있다.
이때는 UITabBarControllerDelegate 의
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool 를
이용해 제어가 가능하다.
먼저 MainTabBarController 클래스를 생성하고 아래와 같이 코드를 작성한다.
MainTabBarController.swift
import Foundation
import UIKit
class MainTabBarController: UITabBarController {
var index = 0
override func viewDidLoad() {
self.delegate = self
}
}
extension MainTabBarController: UITabBarControllerDelegate {
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
if(item.title == "채팅") {
index = 1
} else {
index = 0
}
}
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
return index != 1
}
}
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) //탭을 클릭하면 클릭한 UITabBarItem 을 가져온다
탭을 클릭하면 클릭하면
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) 로
UITabBarItem이 넘어오고 이를 통해 UITabBarItem 의 title 을 가져올수 있다.
TabBarItem 타이틀을 하나는 홈 하나는 채팅으로 해두었는데,
이걸 비교해서 index 를 가져왔다.
return index != 1 // 선택된 index 가 1 이 아닐 경우에만 선택을 가능하게 한다.
위의 코드는 단순하게 index가 1일 아닐 경우 선택이 불가능하게 했지만
자신이 원하는 조건으로 변경하여 선택 불가능 여부를 변경하면 된다.
index 를 가져오는 방법 또한 여러 가지가 있겠지만 예제 코드 이므로 참고만 하자.
위의 클래스를 작성하였다면 스토리보드로 이동하여
Custom class 의 class 부분에 설정해 준다.