您的位置:首页 > 产品设计 > UI/UE

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中进行配置,添加约束。

约束:视图布局的规则。

利用约束可以只是:视图在同一水平行上对称,调整视图大小匹配其他试图等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: