UITableView/UITabBarController/可视化编程/自动布局
2015-09-19 16:20
651 查看
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中进行配置,添加约束。
约束:视图布局的规则。
利用约束可以只是:视图在同一水平行上对称,调整视图大小匹配其他试图等等。
相关文章推荐
- iOS 使用UIDocumentInteractionController类打开文件
- java学习笔记图形程序设计及GUI应用小结(1)
- UEditor和CKEditor配置上传图片,视频,附件
- 客户端GUI程序开发漫谈
- UIView 中autoresizingMask的属性
- 点击UITableView的cell展开收缩
- UIScrollView pagingEnabled自定义翻页宽度
- 多线程工具之NSOperationQueue
- 进行水印的添加
- PHP中include和require的区别详解
- 基于信号量与P/V操作同步机制的读者/写者问题的设计与实现 (写者优先)
- UIScrollView总结
- UIView总结:
- java.util.Queue用法
- Scala深入浅出实战经典:39,ListBuffer、ArrayBuffer、Queue、Stack操作代码实战
- C#串口控制舵机、arduino源码 及C#源码及界面
- Distinct Subsequences
- bluetooth-蓝牙事件监听
- Android UI与资源总结(一)
- UITabView 小实例