使用storyboard搭建一个iOS项目

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Bolted_snail/article/details/84825791

纯代码搭建iOS项目

  • 很多老的iOS项目都是用纯代码,大概流程就是项目有几个主要模块就有几个tabbar item就对应有几个ViewController,具体流程如下:
    1. 将对应的控制器设置属性(设置标题、tabBarItem的默认和选中图片),并且每个都包装一个导航控制器(设置为导航控制器的根控制器);
    2. 将导航控制器添加为UITabBarController的子控制器;
    3. UITabBarController设置为UIWindow的根控制器。
class MainViewController: UITabBarController {
   override func viewDidLoad() {
       super.viewDidLoad()
       //添加子控制器
       self.addChildViewController(childVc: HomeViewController(), title: "首页", imageName: "tabbar_home")
       addChildViewController(childVc: MessageViewController(), title: "消息", imageName: "tabbar_message_center")
       addChildViewController(childVc: DiscoverViewController(), title: "发现", imageName: "tabbar_discover")
       addChildViewController(childVc: ProfileViewController(), title: "我", imageName: "tabbar_profile")
   }
}

// swift支持方法的重载
// 方法的重载:方法名称相同,但是参数不同. --> 1.参数的类型不同 2.参数的个数不同
extension MainViewController{
//设置控制属性并包装导航控制器
   private func addChildViewController(childVc: UIViewController, title : String, imageName : String){
       // 1.设置子控制器的属性
       childVc.title = title
       childVc.tabBarItem.image = UIImage(named: imageName)
       childVc.tabBarItem.selectedImage = UIImage(named: imageName+"_highlighted")
       // 2.包装导航栏控制器
       let navVC = UINavigationController(rootViewController: childVc);
       // 3.添加控制器
       self.addChildViewController(navVC)
   }
}

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
   var window: UIWindow?
   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
       UITabBar.appearance().tintColor = UIColor.red
       window = UIWindow(frame: UIScreen.main.bounds)
       //设置根控制器
       window?.rootViewController = MainViewController()
       window?.makeKeyAndVisible()
       return true
   }

纯代码搭建iOS项目
可以看出纯代码其实也是很简单的,这里需要注意的是,只要在应用程序启动完成时给window设置了根控制器,不论Main Interface是否设置了storyboard,都是走设置的这个根控制器去。如果想用storyboard搭建项目就不能在AppDelegate启动完成的代理方法中给window添加子控制器。

storyboard搭建iOS项目

  • 虽然我自己也觉得用storyboard搭建iOS项目反而更麻烦,并且xib布局控件对一些复杂或者动态的页面反而更麻烦,但是一些固定简单布局还是挺实用的,而且苹果官方是推荐使用的,所以对于一个iOS开发者来说还是要有所掌握的。
  • 效果图
    效果图
  • 具体步骤
    1.在project->Target->General->Main Interface选中要首先展示的stroyboard,如下图,选择首先展示的事登录页面Login.storyboard
    在这里插入图片描述
    如果需要在控制器处理一些东就西需要绑定控制器,比如登录要验证用户名,密码,验证码等等,如果仅仅是展示和跳转可以不绑定,直接拉线。
    要绑定控制器
    就要勾选is Initial View Controller,表示该控制器作为别的stroyboard跳过来的第一个入口。
    在这里插入图片描述
    2.点击登录后就进入首页,在Main.storyboard中拖入一个Tab Bar Controller,删掉自带的子控制器,添加导航控制器。
    UITabBarController
    绑定一个UITabBarController并且勾选is Initial View Controller
    绑定控制器
    添加子控制器,可以直接拖入Navigation Controller,但是由于区域太小,拖入子控制器很多的话展示连线的比较凌乱,所以可以拖入Storyboard Reference这个专门引用Storyboard的控件。
    Storyboard Reference
    绑定对应的storyboard即可以,然后连线选择view controller
    绑定storyboard
    连线选择view controller
    3.包装导航控制器,设置根控制器属性,拖入Navigation Controller,默认根控制器是Tab View Controller,可以根据需求删除跟换成自己想要的根控制器。这里的连线要选择root view controller,需要绑定和初始化控制器,注意这里绑定是根控制器,不是导航控制器。
    Navigation Controller
    给导航控制器添加Tab Bar Item,注意这个Item也可以添加Tab Bar Controller上,但推荐设置到导航控制器上,一般谁是Tab Bar Controller子控制器就添加到谁上。
    Tab Bar Item
    设置Tab Bar Item的属性,Badge、Title、image、Select Image
    设置Tab Bar Item的属性
    上面storyboard都设置完成了,Main Interface设置为Login.storyboard,即应用程序启动完成加载的是登录页面,登录完成后才展示首页,点击登录按钮登录成功进入首页:
class LoginViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    @IBAction func login(_ sender: Any) {
        //要获取单独控制器所在的UIStoryboard
        let mainsb = UIStoryboard.init(name: "Main", bundle: nil)
        //获取对应绑定的控制器
        let mainvc = mainsb.instantiateInitialViewController()
        UIApplication.shared.keyWindow?.rootViewController = mainvc
    }
    }

到此使用storyboard搭建一个登录到登录首页的一个基本框架就完成了。

  • 这里有一些注意点:
  1. storyboard可以拖入多个控制器控件,但至少有一个控制器,主要用来初始化控制器的,而xib则主要用来初始化示图的如UIView、UITableView等。
  2. storyboard中的控制器控件如果想做一些其他的操作,如数据出来、逻辑处理,可以绑定对应类型的控制器。
  3. is Initial View Controller表示别的storyboard跳过来的对应的第一个控制器(有多个控制器时),及一个入口,必须有且只有一个被勾选
  4. 由于storyboard主要是设置控制器之间的关系,在控制器控件之间连线时,一定要选对关系,是跟控制器,还是子控制器,还是push等,一定不要连接错。

swift中使用xib自定义view

1.绑定名称
绑定名称
2.通过xib初始化自定英view

class VisitorView: UIView {
//提供快速通过xib创建的类方法
    static func visitorView() -> VisitorView{
//        let bundle = Bundle(for: VisitorView.self)
        let nib = UINib(nibName:"VisitorView", bundle: nil)
        return nib.instantiate(withOwner: self, options: nil).first as! VisitorView
    }
 }

猜你喜欢

转载自blog.csdn.net/Bolted_snail/article/details/84825791
今日推荐