iOS UITableView/UITabBarController/可视化编程/自动布局

UITableView高级

1.自定义UITableViewCell

自定义Cell这样就可以有一个能够显示复杂控件的cell。

自定义Cell就是创建一个UITableViewCell的子类。

把Cell上的空间创建都封装在子类中,简化UIViewController中的代码。

子视图控件添加到Cell的contentView上。



如何通信?

cell中的控件如何显示Model中的信息?

cell中声明一个Model类型的属性,viewController中获取到Model对象后渎职给Cell的Model属性,

cell中重写Model的setter方法,把Model对象中的内容重新赋值给每个控件

M和V不直接进行通信,C负责M和V之间进行通信


2多种类型的CELL混合使用

开发中常见多种类型的cell混合在一个TableView中使用。

通常每种类型的cell有不同的布局样式 。


注意事项

通常行我们会在TableView:cellForRowAtIndexPath:方法中根据不同的Model来决定使用什么类型的cell

每种类型的cell要定义不同的重用标识符

cell重用的时候会根据重用标识从重用队列中取用哪种类型的cell


3 CELL自适应高度

获取文本高度

计算一段文本在限定宽高内所占矩形大小

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary*)attributes context:(NSStringDrawingContext*)context

注意事项:

计算文本高度是所用的字体要和Label显示时用的字体一直。
Label的宽度要和计算时使用的限定宽度一致。
这样才能保证文本显示在label中时,Label高度恰巧够。

Cell自适应高度

tableView:heightForRowAtIndexPath:方法比TableView:cellForRowAtIndexPath先执行
所以要提前计算好每行Cell需要多少高度。

总结
自定义TableViewCell。多种类型的Cell混合在TableView中使用及Cell动态高度都是以后我们实际开发中的常用的技术点,务必要熟练掌握。

cell自适应高度

自定义cell



结合前几天学习的UITableView 我想是时候做一个使用UITableVIew比较全的程序了

那就是接下来的通讯录····


实现了对联系人的添加,删除,移动操作。

点击添加按钮以模态的形式弹出了添加联系人界面
这就要知道什么是模态ViewController

利用单例存储数据 存储联系人的数据 这就要了解什么是单例 什么是单例模式

好了 既然了解了我们的学习任务,那么现在开始学习吧!


模态ViewController
程序中切换页面,可以使用UINavigationController通常导航功能实现页面切换
某种情况下,可以使用视图控制器的一对方法实现 切换页面
就是presentViewController:animated:completion: 展示新的页面
dismissViewController:animated:completion:从新页面返回
通过上述方法显示的Controller被称为模态视图控制器。

注意:模态视图控制器不是一个类,只是一种方式显示的Controller



UIImagePickerController 条用系统相册,照相机。
临时展示一些内容,例如:程序中用户登录通讯录中添加联系人等等。
导航控制器控制的Controller具有层级关系。present控制显示的Controller与之前的Controller是两个层级。

使用方式
presentViewController:animated:completion:模态显示Controller
在controllerA中模态显示ControllerB

presenting View Controller => controller A
presented View controller => controller B(被弹出的)

dismissViewController:Animated:completion:弹出模态Controller
两种实现方式,在模态Controller中使用:

[self dismissViewControllerAnimated:YES completion:nil];
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

使用self调用方法,系统会使用self.presentingViewController调用这个方法。


属性设置
modalPresentationStyle 模态Controller显示样式
modalTransitionStyle 模态显示动画样式



单例对象
单例就是唯一的实例对象,即使用某个类创建的对象是程序中唯一的实例对象。注意:通常每次使用alloc创建的是不同的对象
如果一个类只能创建一个对象,称为单例类。单例类可以是工具类,视图类,控制器类。


使用场景
某些时候,程序中的多个类需要使用同一个变量。如何处理?将变量定义在单例中,则所有类在操作这个变量是都很方便容易。

使用方法
定义单例类
定义创建单例对象的方法(类方法)
根据需要实现伪单例或完整单例。

注意
操作单例对象的变量存储在静态区,程序  关闭后由系统自动回收。
单例对象存储在堆区,不释放,程序关闭后由系统自动回收。
变量和单例对象的生命周期与程序同步。


优势:
在内存中 只有一个对象,节省内存空间
避免频繁的创建销毁对象,可以提高性能。
避免对共享资源的多重占用。
可以全局访问。
降低模块之间的耦合度。降低代码的复杂度。


单例模式

单例模式是一种设计模式
实现:定义一个单例类,保证程序中这个类只能创建唯一的实例对象,实现资源共享。

标签视图,就是UITabBarController


UITabBarController使用范围广泛
分为三层结构 一层是Tab Bar 一层是Custom Content 一层是Tab bar controller view

它的几个重要的属性
viewContollers 显示的视图控制器 是一个数组
tabBar 标签栏
delegate 代理
selectedIndex  选中某个tabBarItem

UITabBarController 的协议方法 一个是将要选中控制器触发的方法 一个是已经选中控制器触发的方法


tabBar 是UITabBar 对象,包含多个UITabBarItem,每一个tabBarItem 对应一个viewController。tabBar高度49;

当tabBarItem超过5个时,系统会自动增加一个更多按钮,点击更多按钮,没有在底部出现的那些按钮会以列表形式显示出来。。

tabBar的属性,tintColor barTintColor 图像设置。

UITabBarItem
可以设置title Image badgevalue 就是小红点
可以使用系统样式创建tabBarItem


UIAppearence协议
#pragma mark------UIAppearence 统一修改(一键换肤)-------
    [[UINavigationBar appearance]setBarTintColor:[UIColor whiteColor]];
    //给window设置根视图控制器
    [self.window setRootViewController:tabBC];

3.Block高级
Block 函数是匿名函数,能够实现函数回调功能。

回调功能就是在一个文件中声明这个函数,在另一个文件中实现。
用于页面之间通信,同时可以进行传值。

Block内存问题
MRC 定义属性接收Block 必须使用copy修饰,retain无效,即retain和assign会造成野指针问题
block 在某个方法中定义时存储在栈区,在另一个类中使用需要进行copy,存储在堆区。
当不适用Block时需要销毁,Block_Release()
在Block实现部分,不能直接使用实例变量;self调用属性,因为Block会造成self引用基数加1 ,最终导致循环引用问题
使用__block解决循环引用的问题。

ARC  定义属性接收Block 必须使用strong修饰

举例
//
typedef void (^PassValueBlock)(NSString *);

//属性
@property(nonatomic,strong)PassValueBlock passValueBlock;



 实现部分
 


UI的可视化编程

Interface Builder
简称IB 是Mac OS X和iOS平台下用于设计和测试用户界面的应用程序。
提供了拖放面板,可以将空间拖放到屏幕上。

.xib和.nib文件

IB创建.xib文件,包括视图布局,以XML格式存储。
程序运行后,.xib文件中的内容编译为.nib文件(二进制文件),存储在工程包中。


使用IB初始化视图控制器
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
nilNameOrNil是.xib文件的名字。
注意:nibNameOrNil如果填nil,默认找到与类同名的.xib文件(LoginViewController.xib LoginView.xib)


插座变量
插座变量,用于控制IB中的UI空间。
IBOutlet 外联指针。连接插座变量和IB中的UI空间
设置:选中控件,按住command,向类中拖放,设置变量名。


动作
动作,用于相应UI控件的触发事件。
IBAction  连接方法和IB中的UI控件。
设置:选中控件,按住command,向类中拖放,设置方法名。


stroyBoard的注意事项
在AppDelegate的application:didFinishLaunchingWithOptions: 方法中不要再用代码初始化一个window

利用创建好的storyBoard在应用程序配置General中设置为Main interface

视图添加与控制和IB开发一样。

storyBoard创建视图控制器

controller可以设置标识,通过标识从storyBoard创建视图控制器对象。
UiStoryBoard,storyboard对象。视图控制器有属性storyboard。也可以通过文件名来创建对应的storyboard文件对象。

[self.storyboard instantiate ViewControllerWithIndentifier:**];

Segue的使用
segue关联按钮

利用segue去push 视图控制器
选中按钮,按住command。从按钮向下一级页面连线。按钮不需要添加相应方法。
注意:使用与不存在传值的页面切换。

Segue关联两个页面
要给Segue设置唯一的标识符
利用Segue去push视图控制器的时候。使用视图控制器的实例方法:

-(void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender;

Segue 实现传值
-(void)prepareForSegue:(UIStoryboardSegue*)Segue sender:(id)sender segue触发之后,下一个页面显示之前执行。

Segue包含三个重要的属性:identifier sourceViewController destinationViewController
通过destinationViewController获取下一个页面对象,实现传值。


自定义单元格和自动布局



自定义单元格  就是UITableView的Cell 在Storyboard中,可以直接在TableView中添加Prototype Cells
可以在Prototype  Cells 中的单元格中添加自定义子视图。

自定义单元格的注意事项
选中prototype Cell是中的单元格后在Xcode工具的右边的检查器工具中修改单元格的标识符,注意标识符要与该表格视图的其他单元格区分。

如果有自定义单元格类的话,并且在自定义单元格类中添加了IB修饰符修饰的属性和方法。需要在storyBoard的单元格检查器中的Custom Class 修改为自定义的类。


五,自动布局

配置自动布局的方式
在storyboard中进行配置,添加约束。
约束:视图布局的规则。
利用约束可以只是:视图在同一水平行上对称,调整视图大小匹配其他试图等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值