Swift学习日记(1)

在学习swift过程中 要求我不用课程里的nav+tabbar结构,而是采用tabbar➕nav

class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        let vc = MainController()
        self.window = UIWindow(frame: UIScreen.main.bounds)
        window!.rootViewController = vc
        window!.makeKeyAndVisible()

        return true
    }

}

这里面的MainController里面一定得是tabbar
MainController:

class MainController: UITabBarController {

    override func viewDidLoad() {
        
        super.viewDidLoad()
        tabBar.tintColor = .primaryColor
        tabBar.isTranslucent = true
        
        addChildController(DiscoveryController(), "发现", "Discovery")
        addChildController(FeedbackController(), "动态", "Feed")
        addChildController(CartController(), "购物车", "Live")
        addChildController(OrderController(), "订单", "Live")
    }
    
    func addChildController(_ vc:UIViewController, _ title:String, _ imageName:String){
        let target = UINavigationController(rootViewController: vc)
        target.tabBarItem.title = title
        target.tabBarItem.image = UIImage(named: imageName)
        target.tabBarItem.selectedImage = UIImage(named: "\(imageName)Selected")
        target.tabBarItem.setBadgeTextAttributes([.foregroundColor:UIColor.colorOnSurface], for: .selected)
        addChild(target)
    }
}

func addChildController里面 要把每个viewcontroller套个nav 所以用

let target = UINavigationController(rootViewController: vc)

两者区别是:
T+N:
Tab Bar Controller:通常用于应用的主要导航层次结构,每个选项卡代表应用中的一个独立的模块或视图控制器。
Navigation Controller:可以嵌套在每个选项卡中的某些视图中,提供了从一个视图到另一个视图的导航功能,包括推入和弹出视图控制器。每个导航控制器都可以有自己独立的导航堆栈。
在这种结构下,每个选项卡可以有自己的导航控制器。用户可以通过切换选项卡来访问不同的模块或视图,并且在每个模块内部,可以使用导航控制器来管理其内部的视图导航。
N+T:
Navigation Controller:是应用的主要导航层次结构,用于管理应用中的多个视图控制器。它提供了导航栈的管理,用户可以通过推入和弹出视图控制器来浏览不同的界面。
Tab Bar Controller:通常嵌套在导航控制器内部的某些视图中。每个选项卡代表一个视图控制器,用户可以通过点击选项卡来切换不同的模块或视图。
在这种结构下,导航控制器是应用的主要导航方式,用户可以在应用的不同层级之间导航。某些特定的视图或模块可能包含一个选项卡控制器,允许用户在该视图内部切换不同的功能。


应用场景:
如果你的应用有多个独立的模块需要切换,你可能会选择第一种结构。如果你的应用有一个主要的导航结构,但某些部分需要包含多个子模块,你可能会选择第二种结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值