Tôi khuyên bạn nên làm như vậy:
Trước tiên, bạn nên nghĩ đến tất cả các loại tab có thể ở trong thanh tab. Trên ảnh chụp màn hình của bạn có các tab, trình điều khiển hiện tại và tab, trình bày trình đơn đó. Vì vậy, chúng ta có thể tạo enum với tất cả các loại sau:
enum TabType {
case controller
case menu
}
Sau đó bạn có thể lưu trữ hàng loạt các loại tab theo thứ tự chúng được hiển thị trong thanh tab, cho ảnh chụp màn hình của bạn như vậy
let tabTypes: [TabType] = [.controller, .controller, .controller, .controller, .menu]
Sau đó, bạn nên thực hiện phương thức func tabBarController(_:, shouldSelect:) -> Bool
của UITabBarControllerDelegate
, trả về true
nếu thanh tab được phép chọn bộ điều khiển đã truyền và false
nếu không.
Nếu bạn trả lại true
so với tất cả các công việc khác (như trình điều khiển xem bộ điều khiển xem và công cụ khác), thanh điều khiển thanh tab sẽ làm cho bạn.
Trong trường hợp của bạn, bạn muốn thực hiện tác vụ tùy chỉnh khi nhấp vào tab, vì vậy bạn nên trả về false
. Trước khi trở về bạn nên trình bày thực đơn của bạn.
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if let index = tabBarController.viewControllers?.index(of: viewController),
index < tabBarTypes.count {
let type = tabBarTypes[index]
switch type {
case .menu:
// perform your menu presenting here
return false
case .controller:
// do nothing, just return true, tab bar will do all work for you
return true
}
}
return true
}
Trong triển khai này, bạn có thể dễ dàng thay đổi thứ tự loại tab hoặc thêm một số loại tab khác và xử lý thích hợp.
bạn đã tìm thấy giải pháp cho điều này chưa? Tôi cần cùng một số –
Nó chắc chắn là địa ngục trông xấu xí và có phần là một mô hình chống. Đó là _usually_ tốt hơn để làm cho tab thứ năm 'push' một newViewController mà sau đó sẽ có nhiều tùy chọn hơn. – Honey
Trên Tab năm, những gì sẽ có trong nền? (phần màu trắng), nó sẽ là màn hình được chọn trước đó? –