当前位置: 代码网 > it编程>App开发>苹果IOS > iOS各种ViewController控制器使用示例完整介绍

iOS各种ViewController控制器使用示例完整介绍

2024年05月15日 苹果IOS 我要评论
正文ios 界面开发最重要的是viewcontroller和view,viewcontroller是view的控制器,也就是一般的页面,用来管理页面的生命周期(它相当于安卓里的activity,两者很

正文

ios 界面开发最重要的是viewcontroller和view,viewcontroller是view的控制器,也就是一般的页面,用来管理页面的生命周期(它相当于安卓里的activity,两者很像,又有一些差异)。

viewcontroller的特点是它有好几种。一种最基本的uiviewcontroller,和另外三种容器:uinavigationcontroller、uitabbarcontroller、uipageviewcontroller。

所谓容器,就是它们本身不能单独用来显示,必须在里面放一个或几个uiviewcontroller。

不同容器有不同的页面管理方式和展示效果:

  • uinavigationcontroller 用导航栏管理页面
  • uitabbarcontroller 用底部tab管理页面
  • uipageviewcontroller 用切换器管理页面

容器还可以嵌套,比如把uitabbarcontroller放进uinavigationcontroller里面,这样在tab页面里,可以用启动导航栏样式的二级子页面。

1 uiviewcontroller

这是最简单的页面,没有导航栏。

使用present方法展示,展示时从底部弹起,可以用下滑手势关闭,也可以多次启动叠加多个页面。

class viewcontroller: uiviewcontroller {
    override func viewdidload() {
        super.viewdidload()
        // do any additional setup after loading the view.
        title = "\(self.hash)"
        var label = uibutton(frame: cgrect(x: 10, y: 100, width: 300, height: 100))
        label.settitle("present viewcontroller", for: .normal)
        view.addsubview(label)
        label.addtarget(self, action: #selector(presentvc), for: .touchupinside)
        label = uibutton(frame: cgrect(x: 10, y: 200, width: 300, height: 100))
        label.settitle("present navigationcontroller", for: .normal)
        view.addsubview(label)
        label.addtarget(self, action: #selector(presentnc), for: .touchupinside)
        label = uibutton(frame: cgrect(x: 10, y: 300, width: 300, height: 100))
        label.settitle("push viewcontroller", for: .normal)
        view.addsubview(label)
        label.addtarget(self, action: #selector(pushvc), for: .touchupinside)
        label = uibutton(frame: cgrect(x: 10, y: 400, width: 300, height: 100))
        label.settitle("present tabbarcontroller", for: .normal)
        view.addsubview(label)
        label.addtarget(self, action: #selector(presenttc), for: .touchupinside)
        label = uibutton(frame: cgrect(x: 10, y: 500, width: 300, height: 100))
        label.settitle("present pageviewcontroller", for: .normal)
        view.addsubview(label)
        label.addtarget(self, action: #selector(presentpc), for: .touchupinside)
    }
    @objc func presentvc() {
        let vc = viewcontroller()
        vc.view.backgroundcolor = .darkgray
        present(vc, animated: true)
    }
    @objc func presentnc() {
        let vc = viewcontroller()
        vc.view.backgroundcolor = .gray
        let nc = uinavigationcontroller(rootviewcontroller: vc)
        present(nc, animated: true)
    }
    @objc func presenttc() {
        let tc = mytabbarcontroller()
        tc.view.backgroundcolor = .blue
        let nc = uinavigationcontroller(rootviewcontroller: tc)
        present(nc, animated: true)
    }
    @objc func presentpc() {
        let pc = mypageviewcontroller()
        pc.view.backgroundcolor = .red
        let nc = uinavigationcontroller(rootviewcontroller: pc)
        present(nc, animated: true)
    }
    @objc func pushvc() {
        let vc = viewcontroller()
        vc.view.backgroundcolor = .purple
        if let nc = navigationcontroller {
            nc.pushviewcontroller(vc, animated: true)
        } else {
            print("navigationcontroller nil!")
        }
    }
}  

2 uinavigationcontroller

这是最常用的页面导航方式,顶部展示导航栏,有标题、返回按钮。

使用pushviewcontroller方法展示,展示时从右往左出现,可以用右滑手势关闭,也可以多次启动叠加多个页面。

注意:

uinavigationcontroller用来管理一组uiviewcontroller,这些uiviewcontroller共用一个导航栏。

一般来说,uinavigationcontroller能很好地控制导航栏上面的元素显示和转场效果。

如果需要定制导航栏元素,尽量修改uiviewcontroller的导航栏,不要直接修改uinavigationcontroller的导航栏。

3 uitabbarcontroller

这个一般用来做主页面的展示,下面配置多个tab,用来切换页面。

class mytabbarcontroller: uitabbarcontroller {
    init() {
        super.init(nibname: nil, bundle: nil)
        self.tabbar.backgroundcolor = .gray
        let vc1 = viewcontroller()
        vc1.tabbaritem.image = uiimage(named: "diamond")
        vc1.tabbaritem.title = "tab1"
        vc1.view.backgroundcolor = .red
        let vc2 = viewcontroller()
        vc2.tabbaritem.image = uiimage(named: "diamond")
        vc2.tabbaritem.title = "tab2"
        vc2.view.backgroundcolor = .blue
        let vc3 = viewcontroller()
        vc3.tabbaritem.image = uiimage(named: "diamond")
        vc3.tabbaritem.title = "tab3"
        vc3.view.backgroundcolor = .purple
        self.viewcontrollers = [
            vc1,
            vc2,
            vc3,
        ]
    }
    required init?(coder: nscoder) {
        fatalerror("init(coder:) has not been implemented")
    }
}

4 uipageviewcontroller

这个用来做翻页的页面,比如电子书或者广告banner。可以配置左右或上下翻译,翻页效果可以配置滚动或者模拟翻书。

用viewcontrollerbefore和viewcontrollerafter回调方法控制页面切换。viewcontrollerbefore方法是让我们给它提供当前页面的前一个页面,viewcontrollerafter方法是让我们给它提供当前页面的后一个页面。

注意:

uipageviewcontroller有预加载机制,它会提前加载当前页面的前后页面。

但是它没有实现页面缓存机制,需要我们在外部做缓存。

如果页面非常多,但又是同一个类的实例,那么一般创建三个实例就够了,然后在viewcontrollerbefore和viewcontrollerafter方法里循环使用这三个。

class mypageviewcontroller: uipageviewcontroller, uipageviewcontrollerdatasource {
    lazy var vcs = [
        viewcontroller(),
        viewcontroller(),
        viewcontroller(),
        viewcontroller(),
        viewcontroller(),
    ]
    init() {
        super.init(transitionstyle: .scroll, navigationorientation: .horizontal)
        self.datasource = self
        let vc1 = viewcontroller()
        vc1.view.backgroundcolor = .red
        let vc2 = viewcontroller()
        vc2.view.backgroundcolor = .blue
        let vc3 = viewcontroller()
        vc3.view.backgroundcolor = .purple
        let vc4 = viewcontroller()
        vc4.view.backgroundcolor = .gray
        vcs = [vc1,vc2,vc3,vc4
        ]
        self.setviewcontrollers([vcs[0]], direction: .forward, animated: false)
    }
    required init?(coder: nscoder) {
        fatalerror("init(coder:) has not been implemented")
    }
    func pageviewcontroller(_ pageviewcontroller: uipageviewcontroller, viewcontrollerbefore viewcontroller: uiviewcontroller) -> uiviewcontroller? {
        let i = (vcs.firstindex(of: viewcontroller as! viewcontroller) ?? 0) - 1
        if i < 0 {
            return nil
        }
        return vcs[i]
    }
    func pageviewcontroller(_ pageviewcontroller: uipageviewcontroller, viewcontrollerafter viewcontroller: uiviewcontroller) -> uiviewcontroller? {
        let i = (vcs.firstindex(of: viewcontroller as! viewcontroller) ?? 0) + 1
        if i >= vcs.count {
            return nil
        }
        return vcs[i]
    }
}

以上就是ios各种viewcontroller控制器使用示例完整介绍的详细内容,更多关于ios viewcontroller控制器的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com