小项目(一)—— QQ框架 UITabBarController静态单元格、Modal

el/2023/6/4 15:19:57

UITabBarController

跟UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型例子就是QQ、微信等应用

UITabBarController的简单使用

UITabBarController的使用步骤

  1. 初始化UITabBarController
  2. 设置UIWindow的rootViewController为UITabBarController
  3. 根据具体情况,通过addChildViewController方法添加对应个数的子控制器

UITabBarController的子控制器

UITabBarController添加控制器的方式有2种

添加单个子控制器

- (void)addChildViewController:(UIViewController *)childController; 

设置子控制器数组

@property(nonatomic,copy) NSArray *viewControllers;

UITabBarController的view结构

UITabBar

如果UITabBarController有N个子控制器,那么UITabBar内部就会有N个UITabBarButton作为子控件

如果UITabBarController有4个子控制器,那么UITabBar的结构大致如下图所示

UITabBarButton

UITabBarButton里面显示什么内容,由对应子控制器的tabBarItem属性决定

App主流UI框架结构

     

 

    [[[UIView alloc]init] sizeToFit];//根据uiview对象中的内容自己适应大小  与x y 无关UIImageView* imageView = [[UIImageView alloc]init];imageView.image = [UIImage imageNamed:@"setting_about_pic"];[imageView sizeToFit];//若没有这句  imageView显示不出来  因为 Imageview没有大小 lable也可使用[self.view addSubview:imageView];

editor —> size to fot content

静态单元格可以不写数据源方法

Modal

除了push之外,还有另外一种控制器的切换方式,那就是Modal

任何控制器都能通过Modal的形式展示出来

Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止

以Modal的形式展示控制器

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion 

关闭当初Modal出来的控制器

- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;

A控制器Modal到B控制器    presentingViewController代表A控制器  presentedViewController代表B控制器

A跳到B B里执行dismiss 其实是B给A发消息 让A关闭了B

谁负责显示,谁就负责关闭  A弹出来的B,那么A就负责关闭B

在storyboard中 无法关闭B

在storyboard中,点击线  选modal属性

在代码中:

有业务逻辑,用push,否则 用Modal

http://www.ngui.cc/el/3419350.html

相关文章

ios基础篇(五)—— Quartz2D

一、Quartz2D Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac OS X系统(跨平台,纯 C 语言的)。包含在 Core Graphics 框架中。 Quartz 2D能完成的工作 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 微博图片上的水印绘制\生…

ios基础篇(六)—— Quartz2D 饼状图、柱状图

一、绘制“饼状图” 思路: 构建数据,NSArray *data [30, 15, 5, 17, 3, 10, 20];。根据数据个数绘制“扇形”(弧) 注意: 每个弧的起始、结束弧度都是不一样的 每次绘制完毕一个弧以后都要重新设置下一次的起始弧度…

ios基础篇(七)—— 矩阵操作、图形上下文栈、Quartz2D的内存管理、绘制、图片裁剪

一、矩阵操作 - 仿射变换 缩放 void CGContextScaleCTM(CGContextRef c, CGFloat sx, CGFloat sy)旋转 void CGContextRotateCTM(CGContextRef c, CGFloat angle)平移 void CGContextTranslateCTM(CGContextRef c, CGFloat tx, CGFloat ty) #import "HMView.h"impl…

ios基础篇(九)—— 手势识别

UIGestureRecognizer: 手势识别器 能轻松识别用户在某个view上面做的一些常见手势 UIGestureRecognizer 是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势 UIPanGestureRecognizer(拖动) UIPinchGestureRecognizer&a…

ios基础篇(十)—— CALayer基本属性

在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本输入框、一个图标等等,这些都是UIView其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层 在创建UIView对象时,UIView…

ios基础篇(十.一)—— 动画

CADisplayLink CADisplayLink是一种以屏幕刷新频率触发的时钟机制,每秒钟执行大约60次左右 CADisplayLink是一个计时器,可以使绘图代码与视图的刷新频率保持同步,而NSTimer无法确保计时器实际被触发的准确时间 使用方法: 定义…

ios基础篇(十一)—— 同步/异步、进程/线程、pthread、线程状态、线程同步、自动释放池

多线程 一、同步/异步 1、1同步 我们之前写程序的时候都是从上到下,从左到右,代码执行顺序1个人执行多个任务,也是依次执行,1个人同一时间执行1个任务 1.2异步 多个人可以同时执行多个任务 二、进程/线程 2.1进程 进程是指在系统中正在运行的一个应用程序每个…

ios基础篇(十二)—— 消息循环、GCD、任务和队列、串行、并行、Barrier阻塞、延时操作、一次性执行

一、消息循环 什么是消息循环 Runloop就是消息循环,每一个线程内部都有一个消息循环只有主线程的消息循环默认开启,子线程的消息循环默认不开启消息循环的目的 保证程序不退出负责处理输入事件如果没有事件发生,会让程序进入休眠状态 1.1 消…

ios基础篇(十三)—— 调度组、NSOperationQueue

一、调度组 有时候需要在多个异步任务都执行完成之后继续做某些事情,比如下载歌曲,等所有的歌曲都下载完毕之后 转到 主线程提示用户 //1 全局队列dispatch_queue_t queue dispatch_get_global_queue(0, 0);//2 调度组dispatch_group_t group dispatc…

ios基础篇(十五)—— SDWebImage

一、SDWebImage介绍 什么是SDWebImage iOS中著名的牛逼的网络图片处理框架包含的功能:图片下载、图片缓存、下载进度监听、gif处理等等用法极其简单,功能十分强大,大大提高了网络图片的处理效率国内超过90%的iOS项目都有它的影子项目地址 ht…