UILabel
基本使用
1.UILabel创建.frame位置确定CGRect 介绍(iOS坐标体系)
UILabel * lable = [[UILabel alloc]init];
lable.frame = CGRectMake(12, 34, 123, 12);
[self.view addSubview:lable];
2.文字内容显示
常用属性方法
1.字体颜色,背景颜色
lable.backgroundColor = [UIColor redColor];
lable.textColor = [UIColor redColor];
2.字体阴影
lable.shadowColor = [UIColor redColor];
lable.shadowOffset = CGSizeMake(2, 3);
3.设置行数
lable.numberOfLines = 3;
4.对齐方式
lable.textAlignment = NSTextAlignmentRight;
lable.textAlignment = NSTextAlignmentLeft;
lable.textAlignment = NSTextAlignmentCenter;
5.字体大小
lable.font = [UIFont systemFontOfSize:20];
6.换行形式
lable.lineBreakMode = NSLineBreakByCharWrapping;字符换行
lable.lineBreakMode = NSLineBreakByWordWrapping;单词换行
lable.lineBreakMode = NSLineBreakByClipping;直接换行
7.宽度自适应
lable.numberOfLines = 0;两者合起用的
[lable sizeToFit];
8.省略方式
lable.lineBreakMode = NSLineBreakByTruncatingHead;
lable.lineBreakMode = NSLineBreakByTruncatingMiddle;
lable.lineBreakMode = NSLineBreakByTruncatingTai
9 字体加粗
myFirstLabel.font = [UIFont boldSystemFontOfSize:40];
UIButton知识点大纲
基本使用
1.UIButton创建.frame位置确定
UIButton * button = [[UIButton alloc]init];
button.frame = CGRectMake(1, 23, 344, 12);
button.backgroundColor = [UIColor redColor];
[self.view addSubview:button];
2.文字内容显示
3.UIButton点击事件处理(常用3种状态)
[button addTarget:self action:@selector(asfafa) forControlEvents:UIControlEventTouchDown];[button addTarget:self action:@selector(qweqwr)
forControlEvents:UIControlEventTouchDragInside];
button addTarget:self action:@selector(UHUQ) forControlEvents:UIControlEventTouchDragOutside];
4.事件响应
[button setTitle:@”按钮“ forState:UIControlStateNormal];
[button setTitle:@”高亮“ forState:UIControlStateHighlighted];
[button setTitle:@”选中“ forState:UIControlStateSelected];
button.selected = YES;//没有什么实际性的作用;
[button setTitle:@”代码实现“ forState:UIControlStateReserved];
button.enabled = YES;//当代码实现时他可以被选中从而被执行代码当不是yes的时候则不能被选中,作用性挺大的
常用属性方法
5.字体颜色
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
6.字体大小
button.titleLabel.font = [UIFont systemFontOfSize:20];
7.是否可以点击enable
8.点击时是否高亮showTouchWhenHeighted
button.showsTouchWhenHighlighted = YES;
9.tag标志button
10.图片操作
[button setBackgroundImage:[UIImage imageNamed:@”图片“] forState:UIControlStateNormal];
制作一个custom button(图片按钮定制)
1.使用buttonwithType:创建
2.背景图片设置
3.图片设置
4.点击事件处理
5.加载到界面上
实现一个计算器工具(实现加减乘除计算)
(1)显示输入数字特殊字符
(2)按钮数组
(3)设置每个按钮的frame排列(使用for循环)
(4)触发点击事件把字符显示在lable上
(5)当点击等于的时候,计算结果(单步的加减乘除)
UIImageView && UIView
UIImageView(鸟儿飞的实例)
*1.创建和添加图片(UIImage)
UIImageView * Myimage = [[UIImageView alloc]init];
Myimage.frame = CGRectMake(0, 100, 300, 50);
Myimage.backgroundColor = [UIColor redColor];
Myimage.image = [UIImage imageNamed:@”<#string#>”];加入图片
[self.view addSubview:Myimage];
*2.设置ImageView的contentMode图片的填充效果
MyimageView.contentMode = UIViewContentModeScaleAspectFill;
MyimageView.contentMode = UIViewContentModeScaleAspectFit;
MyimageView.contentMode = UIViewContentModeScaleToFill;
[🐷]
判断图片是否可以越界面
myImageView.clipsToBounds = YES;
3.ImageView中的animation动画
(1)图片数组(animationImages)
(2)一轮动画时间(duration)
(3)动画重复次数(repeatCount)
NSMutableArray *birdPhotoArray = [NSMutableArray array];
for (int i = 1; i < 19; i++) {
//获取图片名称
NSString *photoName = [NSString stringWithFormat:@”DOVE %d.png”,i];
//获取UIImage图片
UIImage * birdImage = [UIImage imageNamed:photoName];
//把图片加载到数组中
[birdPhotoArray addObject:birdImage];
}
NSLog(@”birdArray = %@”,birdPhotoArray);
//给动画数组赋值
birdImageView.animationImages = birdPhotoArray;
//一组动画使用的总时间长度
birdImageView.animationDuration = 0.5;
//0的意思是这个动画一直进行
//其他正数表示重复动画的次数
birdImageView.animationRepeatCount = 0;
//启动动画
[birdImageView startAnimating];
//表示birdImageView
birdImageView.tag = 101;
[self.view addSubview:birdImageView];
*4.NSTimer使用
(1)创建(秒数设定,是否重复设定)
(2)NSTimer的销毁
(3)NStimer的暂定和恢复(fireDate:distantFutrue,distantPast)
//TimeInterval:时间间隔(double型)
//target:调用的方法由谁去实现
//selector:调用哪个方法
//userInfo:给方法传递参数(传递的参数是对象)
//repeats:方法会不会反复进行(BOOL)
//如果repeats为NO的情况,timer实际功能是让方法延时执行
//如果repeats为YES的情况,timer实际功能是做一个轮询(每隔一定的时间去访问某个事情)
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];
//暂停
self.timer.fireDate = [NSDate distantFuture];
//恢复
self.timer.fireDate = [NSDate distantPast];
//时间销毁
[self.timer invalidate];
—————————————————————————
#pragma mark – 每隔一段时间改变小鸟的x坐标
-(void)timeChange{
//强转(强行转换类型)
/*
1.本身是你要强转的类型(转回自己本身的类型)
2.子类可以强转为他的父类
注意:
父类不能够强转为子类
1.子类中拥有父类不具有的功能
2.所以在调用子类的方法(父类中没有),就会崩溃
*/
UIImageView *birdImageView = (UIImageView *)[self.view viewWithTag:101];
NSLog(@”%@”,birdImageView);
// birdImageView.frame = CGRectMake(birdImageView.frame.origin.x + 20, birdImageView.frame.origin.y, birdImageView.frame.size.width, birdImageView.frame.size.height);
//把birdImageView的frame获取出来
CGRect r = birdImageView.frame;
//改变r的x坐标
r.origin.x += 2;
//把改变后的r重新赋给birdImageView的frame
birdImageView.frame = r;
if (birdImageView.frame.origin.x > 320) {
//把birdImageView的frame获取出来
CGRect r = birdImageView.frame;
//改变r的x坐标
r.origin.x = 0 – birdImageView.frame.size.width;
//把改变后的r重新赋给birdImageView的frame
birdImageView.frame = r;
}
}
[🐷]另一种写法定位坐标的
myView.center = CGPointMake(320/2, 200);
myView.bounds = CGRectMake(0, 0, 200, 50);
//如果为NO,视图正常显示(默认状态)
myView.hidden = NO;
//alpha视图透明度
//取值范围是0~1
//默认值为1
myView.alpha = 0.5;
//用户交互的设置
//YES时用户交互打开(用户可以操作这个UI控件)
//YES时用户交互关闭(用户不可以操作这个UI控件)
/*
UIView 默认用户交互打开
UIButton 默认用户交互打开
UIImageView 默认用户交互关闭
UILabel 默认用户交互关闭
*/
//window屏幕
//self.view访问
//self.view的子视图(myImageView)
//(myImageView)子视图中嵌套的子视图(myView)
myView.userInteractionEnabled = YES;
5.平移效果
*6.UIImage拉伸效果(stretchableImageWithLeftCapWidth)
UIImage * image = [UIImage imageNamed:@”dfaf”];
image = [image stretchableImageWithLeftCapWidth:image.size.width/2 topCapHeight:image.size.height/2];
UIView 原理
1.它是一个iOS开发中非常重要的类。
UILabel,UIButton,UIImageVIew父类或间接父类都是UIView,换句话说只要是界面上能看到的东西都是UIView
2.UIView起到什么作用?控件都有一些共同的属性和行为
属性: 位置和大小, 背景颜色
方法: 显示和隐藏
把所有的控件的共同的属性和行为抽取出来, 形成了UIView视图类。
(1)位置frame
(2)背景颜色backgroundColor
(3)透明度alhpa
(4)中心位置center
(5)设置大小bounds
(6)tag标签
(7)是否交互userInteractionEnabled
3.view中相互嵌套(界面布局)(人人网界面布局实例)
(1)制作一个导航栏(图片,按钮)
(2)副导航栏(照片,状态,报道)
(3)主界面9大按钮(文字),背景图片
视图层次感
1.把view放在最上面bringSubviewToFront
[myView bringSubviewToFront:subview1];
2.把view放在最下面sendSubviewToBack
[myView sendSubviewToBack:subview2];
3.获取一个父视图superview(仅有一个)
4.获取子视图数组(可以有多个)
5.销毁一个视图(removeFromSuperview)
6.子视图插入insertSubview
[myView insertSubview:subview3 aboveSubview:subview1];
7.交换两个子视图
[myView exchangeSubviewAtIndex:2 withSubviewAtIndex:0];
五彩图移动(创建一个带有移动x,y的UIView)
1.arc4random()%100;
2.随机生成一个位置
3.随机生成一种颜色
4.随机移动速度
UIViewController
UIViewController(界面控制器)
1.为什么使用viewController
常识: iOS应用由于手机屏幕比较小, 一般情况下, iOS应用都是由多个界面构成的, 为了管理每个界面, 系统提供了一个类 UIViewController类
UIViewController是一个非常重要的类,
以后项目中一个界面就是一个UIViewController
2.怎么去控制界面:MVC设计模式
MVC是一种界面实现的设计模式。把每个界面的实现分成为(model)数据层,view(也就是界面),controller逻辑处理器。
(1).view里面是什么,UILabel,UIButton,UIImageView。view负责把界面展示出来。V
(2).Model数据模型,也可以理解为一个界面的数据属性。(NSString,NSDictionary,NSArray,还有对象属性)
(3).Controller,简单来说,就是把数据显示到View上,然后通过view中的用户操作更新数据
3.viewController的生命周期(事件处理)
视图控制器从创建到显示过程:
alloc+init创建
loadView加载视图(不要重写)
viewDidLoad视图已经被加载完成了
viewWillAppear视图即将显示
viewDidAppear视图已经显示了
需求: 每次进入登录界面的时候弹出一个对话框
viewDidLoad 视图加载完成之后执行, 只会执行一次
viewDidAppear 视图现实的时候执行, 每次显示都会执行
视图控制器从显示到释放过程:
viewWillDisappear视图即将消失
viewDidDisappear视图已经消失
dealloc销毁视图控制器
4.内存警告warnning
4.1 类中的值传递
【🐷】
1 制作一个全局变量的类属性(这样就可以在整个.m中都可以给这个属性进行赋值和取值)
2 找到viewWithTag (找到该控件的父视图,通过tag在父视图找到子视图)
3 方法传值(需要在@selector中的方法名加:),传递调用这个方法的对象本身。
4.alertView的简单实用(UI控件,弹框)
5.简单的界面之间的切换
(1)presentViewController(推进)
要转到下个界面要导入下个文件的头文件还有要创建下一个控制面的对象
MainViewController *mvc = [[MainViewController alloc] init];
mvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; //当前界⾯面切换到下⼀一个界⾯面
[self presentViewController:mvc animated:YES completion:nil];
(2)dimssViewController(推出)
-(void)btnClick:(UIButton *)button {
//返回登陆界⾯面//注意: 最好不要alloc+present// dismiss释放// 效果: 释放当前界⾯面, 显⽰示present之前的界⾯面[self dismissViewControllerAnimated:YES completion:nil];
}
(3)界面切换动画UIModalTransitionStyle
mvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; //当前界⾯面切换到下⼀一个界⾯面
6.viewController之间的值传递(正向传递)
(1)正向传值(直接通过属性设定进行传值)
(2)反向传值(delegate代理)
(3)单例传值(实现一个单例,通过单例的读写实现值传递)
(4)通知传值 (使用notification实现不同层面的vc值传递)
A界⾯面alloc创建B界⾯面 A界⾯面向B界⾯面传值:直接设置B界⾯面的属性 2.反向传值
B界⾯面向A界⾯面传值:使⽤用委托3.单例传值 他的传值对象是⼀一个单例对象,通过对单例对象的读和写,实现值传递。
(1)单例对象创建
+(id)shareData{static singleton *singletonData = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{
singletonData = [[singleton alloc] init]; });
return singletonData; }
(2)在.h⽂文件增加⼀一个属性@property (strong, nonatomic) NSString *value;
(3)属性的读和写singleton *oneS = [singleton shareData]; oneS.value = @”写⼀一⾏行数据”;NSString *string = [singleton shareData].value;
4.通知传值 通过发送和接受通知,实现值传递。通知传值需要对象先加⼊入到通知中⼼心,才能 接受到通知。(1)加⼊入到通知中⼼心
[[NSNotifi゙cationCenter defaultCenter]addObserver:self selector:@selector(getNoti:) name:@”resevedNoti” object:nil];
参数:1.收到通知的响应对象 2.响应通知的⽅方法实现3.通知名称 4.响应通知时的传递对象(⼀一般⽤用nil值)
(2)发送⼀一个通知
[[NSNotifi゙cationCenter defaultCenter]postNotifi゙cationName:@”resevedNoti” object:nil userInfo:nil];
参数:1.发送通知名称(identify),对应加⼊入通知中⼼心的对象响应。 2.通知传递对象(id类型)3.通知传递字典(NSDictionary)
(3)通知响应⽅方法使⽤用
-(void)getNoti:(NSNotifi゙cation *)noti{NSLog(@”通知响应”);NSLog(@”object = %@, userInfo = %@”,[noti object],noti.userInfo);
} 对应的object和userInfo就是从post中传递过来的值
7.子视图控制器的添加和移除
//屏幕尺⼨寸iphone4 :宽320 ⾼高480
iphone5 :宽320 ⾼高568
iphone6 :宽375 ⾼高667
iphone6 plus :宽414 ⾼高736
单位(逻辑点)尺⼨寸布局⽤用相对布局self.view.bounds ,我们会获取到的实际的屏幕尺⼨寸
5.管理⼦子视图控制器
ViewController *vc = [[ViewController alloc]init]; [self addChildViewController:vc];vc.view.frame = self.view.bounds;[self.view addSubview:vc.view];
UITextFeild
UITextFeild(文本输入框)基本使用
1.UITextFeild的创建alloc init和frame设定
2.边框类型生.borderStyle
3.代理delegate使用
4.实现协议方法
(1)开始编辑状态调用方法
(2)将要结束编辑状态调用方法
(3)编辑文本改变时调用方法
(4)清除输入框时调用方法
(5)点击next(完成)件回调方法
UITextFeild其他属性
*1.text:文本显示内容
*2.placheholder:没有文本时的提示内容
*3.clearButtonMod:清除button显示情景设定
*4.returnKeyType :键盘类型
*5.secureTextEntry:是否密文
6.autocapitalizationType:自动大写模式
7.autocorrectionType:单词自动修正
*8.background:设置背景图片(必须不设置边框类型)
9.leftView:左侧图片
10.inputView:自定义键盘
11.inputAccessoryView:自定义副键盘
UITextField事件处理
1.输入框变成第一响应(激活)
2.输入框收起键盘(失去第一响应)
3.点击背景收回键盘
4.键盘被遮挡的问题解决
5.控制输入框输入长度
//创建可变字符串,获取textField的当前内容
NSMutableString *mString = [[NSMutableString alloc]initWithString:textField.text];
//在可变字符串的最后加入新增字符串
[mString insertString:string atIndex:range.location];
//限定长度为10个字符串以内
if (mString.length > 10) {
return NO;
}
return YES;
6.email的正则表达式判断
NSPredicate用于查询,原理和用法都类似于SQL中的where,可以理解为是对某些查询方法的封装,简单的对数据进行过滤
NSPredicate的其他用法(有兴趣可以了解)
http://blog.csdn.net/ztp800201/article/details/8116081
两个合起来用loginButtonClick这个是点击时间的
-(void)loginButtonClick{
//获取判断结果
BOOL isEmailString = [self isValidateEmail:self.userNameTextFeild.text];
NSString *alterViewTitle = @””;
if (isEmailString == YES) {
alterViewTitle = @”邮箱地址格式正确“;
}
else{
alterViewTitle = @”邮箱地址格式不正确“;
}
//显示提示框
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:alterViewTitle message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@”确认“, nil];
[alertView show];
}
-(BOOL)isValidateEmail:(NSString *)email {
//制作一个正则表达式的字符串
NSString *emailRegex = @”[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}”;
//通过字符串制作一个NSPredicate对象(工具)
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@”SELF MATCHES %@”, emailRegex];
return [emailTest evaluateWithObject:email];
}
正则表达式概念(简单理解即可)
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:
1. 灵活性、逻辑性和功能性非常的强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。
3. 对于刚接触的人来说,比较晦涩难懂。
概述和使用
1.正则表达式可以简单的理解为使用编辑好的特定表达式方法可以辨别字符串类型
2.使用一般是在网上找到一些字符串类型的正则表达式,嵌套在对应的位置,进行字符串类型识别(不需要自己写)
UINavigationController
导航栏的核心功能
1.导航栏是什么
是一个管理vc的控制器(界面管理),有一个navigationba的导航栏view
有什么功能 (1)管理vc (2)通过navigationBar管理导航栏
push跳到下一个界面 pop返回到上一个界面 poptoRootViewController跳到根目录控制器
2.怎么创建一个导航栏
3.导航栏的推进,推出使用
4.如何返回到跟目录
5.返回到指定视图(这个需要了解整个控制器推进过程)popToViewController
self.navigationController.viewControllers
[self.navigationController pushViewController:tvc animated:YES];//进入下一个界面的
[self.navigationController poptoRootViewControllerAnimated:YES]//回到初始界面的直接回到
导航栏的一些基本设置
1.设置导航栏标题self.title或者是self.navigationItem.title
2.导航栏的副标题prompt
3.设置图片titleView
4.导航栏的style
self.navigationController.navigationBar.barStyle
5.导航栏颜色
self.navigationController.navigationBar.barTintColor = [UIColor yellowColor];//设置颜色
6.导航栏图片
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@”header_bg.png”] forBarMetrics:UIBarMetricsDefault];//设置图片
7.导航栏的隐藏
self.navigationController.navigationBarHidden = YES;
导航栏按钮控件
1.设置导航栏的UIBarButtonItem
设置左边按钮
UIBarButtonItem *myBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(barButtonItemClick)];
self.navigationItem.leftBarButtonItem = myBarButtonItem;
创建一个右边按钮
UIBarButtonItem *myBarButtonItem2 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(barButtonItemClick2)];
self.navigationItem.rightBarButtonItem = myBarButtonItem2;
initWithBarButtonSystemItem
2.UIBarButtonItem自定义UIBarButtonItem *myBarButtonItem3 = [[UIBarButtonItem alloc]initWithCustomView:button2];
self.navigationItem.leftBarButtonItem = myBarButtonItem3;
initWithCustomView【🐷】
ToolBar创建使用
1.设置隐藏属性为显现
2.设置多个ButttonItem到toolBarItems中
3.设置toolBar的背景图片
导航栏原理
1.只有一个导航栏
2.每个viewController会有一个navigationItem
3.导航栏把每个viewController的navigationItem显示到导航栏
导航栏跳转的动画效果
1.创建一个动画对象CATransition:[CATransition animation]
2.type设置
3.subtype设置
4.动画使用总时间:duration
5.动画变化速率:timingFunction ,[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]
6.加载到导航栏中:[self.navigationController.view.layer addAnimation:animation forKey:@””]
UIView动画简单使用
1.开启一个UIView动画
//制作一个navigationController的过场动画
//**********************************
CATransition *transition = [CATransition animation];
transition.type = @”push”;
transition.subtype = kCATransitionFromRight;
transition.duration = 3;
//改变动画速率
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[self.navigationController.view.layer addAnimation:transition forKey:@””];
//**********************************
2.设置UIView动画的总时间
3.关闭UIView动画
动画中的其他设置
1.设置动画的变化速率
动画要开始就要结束必须保持一致 主要是在过程中要移动坐标才能改变其动画的移动效果
//开启一个动画去改变view的位置
[UIView beginAnimations:@”” context:@””];
//这个动画需要使用多少时间(完成时间)
[UIView setAnimationDuration:3];
//代理关联
[UIView setAnimationDelegate:self];
//在动画结束调用的方法
[UIView setAnimationDidStopSelector:@selector(animationStop)];
/*
[self.delegate animationStop];
*/
/*
1.逐渐变快,过了中点逐渐变慢UIViewAnimationCurveEaseInOut, // slow at beginning and end
2.逐渐变快UIViewAnimationCurveEaseIn, // slow at beginning
3.逐渐变慢UIViewAnimationCurveEaseOut, // slow at end
4.匀速
UIViewAnimationCurveLinear
*/
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
CGRect r = myView.frame;
r.origin.x += 100;
myView.frame = r;
//关闭动画
[UIView commitAnimations];
2.设置动画的delegate代理
3.设置动画结束的调用方法(必须先设置代理)
一 创建一个tabbarControler
UITabBarController * tabBarController = [[UITabBarController alloc]init];
再创建几个界面对象
再把界面加入到tabbarControler中
tabBarController.viewControllers = @[vc,svc,three,four];
再把tabbarControler给电脑的主控制器
self.window.rootViewController = tabBarController;
二 设置tabbarControler 的tabBar的ba’c’kbackgroundImage
barTintColor和Barstyle 这个是一个改变整个都改变的
设置风格
tabBarController.tabBar.barStyle = UIBarStyleBlackOpaque;
设置颜色
tabBarController.tabBar.barTintColor = [UIColor blueColor];
设置背景图片
tabBarController.tabBar.backgroundImage = [UIImage imageNamed:@””];
20150611111945616569.jpg
三 设置其界面的tabBarItem (这个是每个界面设置都不一样的都可以去分别设置的)
有这些设置 1 title 2 image(总是选中原图还有另外一种情况是可以根据系统的自行控制来设置它的一些情况的) 3 selectedImage(这个是设置选中时的图片有两种情况一种)
three.tabBarItem.title = @”搜索”;//1
vc.tabBarItem.image = [[UIImage imageNamed:@”tab_0.png”]imageWithRenderingMode:UIImageRenderingModeAutomatic];//系统自行改变不设置的情况下默认这种
svc.tabBarItem.image = [[UIImage imageNamed:@”tab_1.png”]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];//总是显示原图
//设置选中图片
svc.tabBarItem.selectedImage = [UIImage imageNamed:@“”];// 设置当你点击时就会出现你设置的图片的
四 自定义的tabBar
1 首先要导入所有其他界面的头文件
2
//设置子视图控制器的控制区域
firstViewController *fvc = [[firstViewController alloc]init];
fvc.view.frame = CGRectMake(0, 0, 320, 568 – 50);
[self.view addSubview:fvc.view];
[self addChildViewController:fvc];//这是控制区域
3 设置其尾部的tabBar 自定义来设置
自己设置几个自定义的button按钮
4 每个按钮用来控制子视图的界面
各种UI控件
1.开关UISwitch
(1)设置位置(大小固定)51×31
UISwitch *swithControl = [[UISwitch alloc]initWithFrame:CGRectMake(50, 50, 51, 53)];
(2)设置开关状态on,YES为打开
swithControl.on = NO
(3)设置打开状态时背景颜色ontintColor
swithControl.onTintColor = [UIColor redColor];//打开时的背景颜
(4)设置关闭状态时背景边线颜色tintColor
swithControl.tintColor = [UIColor blueColor];//关闭时的背景颜色
(5)设置按钮颜色thembtintColor
swithControl.thumbTintColor = [UIColor orangeColor];//开关颜色设置
(6)设置按钮打开时背景图片onImage
(7)设置按钮关闭时背景图片offImage
(8)设置按钮点击事件UIControlEventValueChanged
[swithControl addTarget:self action:@selector(swithChange:) forControlEvents:UIControlEventValueChanged];
【🐷】配置颜色的方法可以随机配置颜色
float red = arc4random()%255;
float blue = arc4random()%255;
float green = arc4random()%255;
self.view.backgroundColor = [UIColor colorWithRed:red/255.0 green:blue/255.0 blue:green/255.0 alpha:1];
2.UIActivityIndicatorView活动指示控制器(相似与网页加载的)
(1)创建时设置控制器style
UIActivityIndicatorView * activity = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];//动画有大白 小白 灰色
(2)大小是固定的,设置位置center
activity.center = CGPointMake(160, 100);
(3)控制器的开启和关闭(startAnimation,stopAnimation)
[activity startAnimating];
//延时四秒运行hideActivityView方法
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:4 target:self selector:@selector(hideActivityView:) userInfo:activity repeats:NO];
-(void)hideActivityView:(NSTimer *)timer{ //执行的方法执行4秒后自动停下来
UIActivityIndicatorView *activity = timer.userInfo;// 必须传值过来只要有值过来就可以timer.userInfo就可以点这个值的属性的了
//关闭动画(在某个点触发)
[timer.userInfo stopAnimating];
}
3.UISlider滑动控件
(1)高度是固定的34
(2)设置最大值maximumValue
slider.maximumValue = 130;
(3)设置最小值minimumValue
slider.minimumValue = 1;
(4)设置当前值value
slider.value = 1;
(5)滑动事件添加UIControlEventValueChanged
[slider addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
可以让它像播放器一样的自行的去播放但是
NSTimer * timer = [[NSTimer alloc]init];
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(werwr:) userInfo:slider repeats:YES];
4.UISegmentedControl分段控制器像qq上的控制界面
(1)创建时设置items多个按钮(🐷 可以进行选择的进入某一个界面的)
分段选择器 items是一个数组 每一个数组的元素代表一个按钮 像qq上的控制界面
UISegmentedControl * segment = [[UISegmentedControl alloc]initWithItems:@[@”one”,@”two”]];
(2)设置frame
segment.frame = CGRectMake(40, 150, 150, 80);
(3)设置当前选择按钮位置selectedSegmentIndex
segment.selectedSegmentIndex = 1;
(4)插入某个按钮(名称,位置)insertSegmentWithTitle
(5)点击事件添加dealSegmentedControl
[segment addTarget:self action:@selector(segmentValueChanged:) forControlEvents:UIControlEventValueChanged];//这里的判断方法是通过其按钮位置来判断的所以两个是合起来用的
5.UIStepper进步计算器 和我们平时淘宝上买衣服差不多的加减运算的
(1)创建frame大小固定
(2)设置最大值 stepper.maximumValue = 100;
(3)设置最小值stepper.minimumValue = 0;
(4)设置当前值stepper.value = 50;
(5)设置每次进步的加减系数stepValuestepper.stepValue = 10;
(6)点击事件dealSegmentedControl
[stepper addTarget:self action:@selector(stepperValueChanged:) forControlEvents:UIControlEventValueChanged];
6.UIProcessView进度条(🐷 不能像slider一样拖动进度)
(1)创建processView设置style
(2)frame设置UIProgressView * progressview = [[UIProgressView alloc]init];
progressview.frame = CGRectMake(30, 500, 200, 30);
(3)设置当前的进度progress(变化区域0~1)progressview.progress = 0.1;
(4)使用timer改变进度条
7.UITextView文本显示视图
(1)创建对象并给frame //设置textView的圆角弧度 所有的uiview都有这个属性
textView.layer.cornerRadius = 8;
//设置边框厚度
textView.layer.borderWidth = 1.5;
//设置边框的颜色
textView.layer.borderColor = [UIColor redColor].CGColor;
//副键盘栏目
UIView * accessorrview = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 0, 80)];
accessorrview.backgroundColor = [UIColor blackColor];
textView.inputAccessoryView = accessorrview;
(2)与textField的属性和方法类似
(3)text,textColor,textAlignment,font
(4)设置inputAccessoryView做一个键盘的收回
(5)delegate代理使用
//滚动条是否显示
textView.showsVerticalScrollIndicator = NO;
8.UIActionSheet动作列表视图
(1)创建对象initWithTitle…
UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:@”图片加载“ delegate:self cancelButtonTitle:@”取消“ destructiveButtonTitle:@”hello” otherButtonTitles:@”相册“,@”照相“, nil];
// actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
[actionSheet showInView:self.view];
(2)显示使用方法showInView(不能使用addsubview)[actionSheet showInView:self.view];
(3)方法回调(需要声明协议)
– (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex;
{
NSLog(@”buttonIndex = %d”,buttonIndex);
}
9.UIAlertView警告视图
(1)创建对象init
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@”提示” message:@”内存不足” delegate:self cancelButtonTitle:@”取消” otherButtonTitles:@”确定“, nil];
// //在界面中显示
// [alertView show];
(2)设置类型alertViewStyle
(3)加入button(addButtonWithTitle)
(4)实现代理关联
(5)主要的代理方法
– (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;
{
UITextField *nameText = [alertView textFieldAtIndex:0];
UITextField *passwordText = [alertView textFieldAtIndex:1];
NSLog(@”name:%@ pass:%@”,nameText.text,passwordText.text);
}
UIAlertView *alertView = [[UIAlertView alloc]init];
//设置style属性
alertView.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
//设置title值
[alertView setTitle:@”提示“];
alertView.delegate = self;
//添加button
[alertView addButtonWithTitle:@”确定“];
//添加button
[alertView addButtonWithTitle:@”确定“];
//添加button
[alertView addButtonWithTitle:@”确定“];
//显示alertView
[alertView show];
用自己的方法去自我调节警告视图框架
UIGesture手势使用
1.UITapGestureRecongnizer
(1)点击次数和点击手指
//需要几个手指一起点击
tap.numberOfTapsRequired = 1;
//需要点击多少次
tap.numberOfTouchesRequired = 1;
2.双指缩放
(1)创建
(2)方法使用
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(dealPinch:)];
[imageView addGestureRecognizer:pinch];
(3)
//获取缩放比例 pinch.scale
// 设置一个用于缩放的仿射变换的对象
// 实现了缩放的效果
imageView.transform = CGAffineTransformMakeScale(pinch.scale, pinch.scale);
3.UIRotationGestureRecognizer//(旋转)
(1)创建旋转手势对象
UIRotationGestureRecognizer * pRotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGesture:)];
[self.view addGestureRecognizer:pRotation];
(2)手势响应,打印旋转的角度
– (void)rotationGesture:(UIRotationGestureRecognizer *)rotation
{
//确定手势旋转的大小,角度,使视图做出相应的反应
float degree = rotation.rotation *(180/M_PI);
NSLog(@”旋转的角度为%.2f”,degree);
imageView.transform = CGAffineTransformMakeRotation(rotation.rotation);
}
4.快速滑动
滑动手势,确定滑动方向(上左下右)
UISwipeGestureRecognizer * pSwip = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipGesture:)];
//设置滑动的方向,此处为向右,共有4个方向
pSwip.direction = UISwipeGestureRecognizerDirectionRight;
//将手势添加到当前视图中
[self.view addGestureRecognizer:pSwip];
5.UIPanGestureRecognizer(慢速拖拽)
//---拖动手势识别器--//
//创建拖动手势对象
(1)创建
UIPanGestureRecognizer * pPan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGesture:)];
//将手势添加到当前视图中
[self.view addGestureRecognizer:pPan];
(2)使用方法:
//获取拖移的位置
//屏幕上位置
CGPoint screenPoint = [pan locationInView:self.view];
CGPoint selfPoint = [pan locationInView:pan.view];
imageView.center = screenPoint;
6.UILongPressGestureRecognizer(长按)
//创建长按手势的对象
UILongPressGestureRecognizer * pLongPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressGesture:)];
//将手势添加到当前视图中
[self.view addGestureRecognizer:pLongPress];
设置长按时间
//设置长按的时间,2秒以上判定为长按
pLongPress.minimumPressDuration = 2;
UIScrollView使用
1.UIScrollView是什么,基本原理
2.scrollView的创建和基本设置
3.scrollView全内容视图大小设置contentSize(注意,只有contentSize的大小比frame.zise大时,才可以滚动)
4.是否分页显示pagingEnable
5.是否显示滚动条show(横向滚动和纵向滚动)
6.是否具有弹簧效果bounces
7.设置当前查看的位置contentOfSet
myScrollView.delegate = self;
[myScrollView addSubview:imageView];
//scrollView中的属性方法使用
//设置scrollView中的内容的实际大小 只有contentSize的值比frame大的时候才可以滚动
[myScrollView setContentSize:CGSizeMake(320*3, 568)];
//分页滚动 每次滚动以frame的宽度或者高度为单位滚动
myScrollView.pagingEnabled = YES;
//滚动条是否显示 纵向 横向 NO为隐藏
myScrollView.showsVerticalScrollIndicator = NO;
myScrollView.showsHorizontalScrollIndicator = NO;
//设置scrollView中的弹簧
myScrollView.bounces = NO;
//设置scrollView的当前位置
//告诉scrollview当前显示的区域是内容大小中contentSize的哪块内容
[myScrollView setContentOffset:CGPointMake(320, 0)];
CGPoint point = myScrollView.contentOffset; //设值
NSLog(@”pointX = %f”,point.x); //取值
代理使用
1.滚动时回调
-(void)scrollViewDidScroll:(UIScrollView *)ScrollView;
2.开始拖拽时回调
– (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
3.开始滚动时回调
– (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;
4.结束拖拽时回调
– (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
5.结束滚动时回调
– (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
UITableView
1.创建和使用(通讯录)
(1)alloc init创建对象,frame设置,风格设置,plain ,group
(2)准备tableview要使用的数据数组
2.代理实现(3步走)
(1)dataSource,delegate(两个协议)
(2)代理方法实现和使用
<1>一组中有多少行设置
– (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
<2>tableview里面有多少组
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
<3>行高设置
– (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
<4>选中行时回调
– (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
<5>一个cell里面要显示的内容(重点)
– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
重用cell的编写:
static NSString *cellID = @”cell”;
//从tableView中拿出一个能否复用的cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
//如果拿不到可用cell
static int count=0;
if(cell == nil)
{
//风格公有4种
//常用: UITableViewCellStyleSubtitle
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID];
}
3.表单的头部设置tableHeaderView
4.表格的细节编辑和操作
(1)表格视图的编辑(难点)
<1>单元格的删除操作[重点, 必须掌握]
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
<2>单元格的增加操作
状态选择UITableViewCellEditingStyleInsert
<3>单元格的移动操作
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
(注意)
/*
//做两件事情:
//1.从源数组中删除数据
NSMutableArray *srcArray = _dataArray[sourceIndexPath.section];
NSString *info = srcArray[sourceIndexPath.row];
[srcArray removeObject:info];
//2.把数据添加到目标数组中
NSMutableArray *dstArray = _dataArray[destinationIndexPath.section];
[dstArray insertObject:info atIndex:destinationIndexPath.row];
[_tableView reloadData];
*/
<4>多行选中和多行删除操作
(2)表格视图的设置
<1>设置表格的索引
<2>设置段头和段尾
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
<3>表格的分割线
索引回调设置
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
NSMutableArray *indexArray = [[NSMutableArray alloc]init];
for (int i = ‘A’; i < ‘Z’ + 1; i++) {
[indexArray addObject:[NSString stringWithFormat:@”%c”,i]];
}
return indexArray;
}
UITableview笔记大纲
1.自定义cell
(1)创建一个myCell类继承cell
(2)在实例化cell对象时,给cell的内容(子view创建和设置属性)。init方法重写
(3)在tableview的实现cell内容回调中(cellForRowAtIndex),调用并创建自定义的cell(取代UITabelviewCell)
(4)通过数组数据,给cell内容附值
2.索引栏制作和使用
(1)基本创建
<一>searchControl对象创建
<二>searchBar栏目frame设置(只有高度可以改变)
<三>加载到指定的视图中
self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
(2)代理添加
<一>协议声明
<二>协议关联
<三>协议方法实现
@interface ViewController ()<UISearchResultsUpdating>
self.searchController.searchResultsUpdater = self;
-(void)updateSearchResultsForSearchController:(UISearchController *)searchController{}
(3)索引字符处理
<一>使用NSPredicate做字符串的匹配
<二>注意:数组中的元素为字符串元素
NSString *searchString = [self.searchController.searchBar text];
NSPredicate *preicate = [NSPredicate predicateWithFormat:@”SELF CONTAINS[c] %@”, searchString];
if (self.searchList!= nil) {
[self.searchList removeAllObjects];
}
//过滤数据
self.searchList = [NSMutableArray arrayWithArray:[self.dataArray filteredArrayUsingPredicate:preicate]];
//刷新表格
[self.tableview reloadData];
NSString * searchString = self.mySearchController.searchBar.text;
NSPredicate * preicate = [NSPredicate predicateWithFormat:@”SELF CONTAINS[c] %@”,searchString];
NSMutableArray *mArray = [NSMutableArray array];
for (NSDictionary * dic in self.dataArray) {
NSString * string = dic[@”name”];
[mArray addObject:string];
}
self.dataListArray = [mArray filteredArrayUsingPredicate:preicate];
[self.myTableView reloadData];
(4)搜索后出现搜索栏中的tableview,使用active区分
<一>通过searchController的active属性区分是否调用搜索栏
<二>如果调用了搜索栏,就通过过滤后的数组显示数据
<三>如果没有,则用原来的数据显示tableview
3.添加组头
#pragma mark – 设置段头标题和段尾标题
– (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return _indexArray[section];//section
}
//设置段尾标题
– (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
return [_indexArray[section]
stringByAppendingString:@” 结束“];
}
//在段头添加任意一个视图
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
view.backgroundColor = [UIColor yellowColor];
return view;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 20.0;
}
4.快速索引s
#pragma mark – 索引
//作用: 可以让我们快速的跳转到某个段(return的Array元素数量为section的数量)
– (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return _indexArray;
}
5.中文转拼音
入参数:NSString:@“中文”; fromString
出参数:[ms subStringToIndex:1],可变数组的第一个字符
-(NSString *)changeString:(NSString *)fromString
{
NSMutableString *ms = [[NSMutableString alloc]initWithString: fromString];
if (CFStringTransform((__bridge CFMutableStringRef)ms,0, kCFStringTransformMandarinLatin, NO))
{
NSLog(@”Pingying: %@”, ms);
}
if (CFStringTransform((__bridge CFMutableStringRef)ms,0, kCFStringTransformStripDiacritics, NO))
{
NSLog(@”Pingying: %@”, [[ms uppercaseString]substringToIndex:1]);
}
return [ms substringToIndex:1];
}
(1)第一个把每个人名都找到人名的首字符
(2)制作一个字典:key为name -人名 ;key为firstLater - 首字母
(3)根据首字母把相应的dic归类(A到Z的for循环)
(4)用dataArray嵌套(26字符数组)
tableview如何显示
(1)组头应该是dic中任意一个元素的key为firstLater的首字母
(2)把每个dataArray的数组,都取其中一个元素的首字母作为索引数组的元素(26个)
一 自定义的
Plist中的数据放到数组中
NSString * path= [[NSBundle mainBundle]pathForResource:@”data” ofType:@”plist”];
self.dataArray = [[NSArray alloc]initWithContentsOfFile:path];
注册一个cell
self.cellIdentify = @”Cell”;
[self.myTableView registerNib:[UINib nibWithNibName:@”myCellTableViewCell” bundle:nil] forCellReuseIdentifier:@”Cell”];
myCellTableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:self.cellIdentify];
if (cell == nil) {
cell = [[[NSBundle mainBundle]loadNibNamed:@”myCellTableViewCell” owner:self options:nil]firstObject];
UITableview笔记大纲
1.自定义cell
(1)创建一个myCell类继承cell
(2)在实例化cell对象时,给cell的内容(子view创建和设置属性)。init方法重写
(3)在tableview的实现cell内容回调中(cellForRowAtIndex),调用并创建自定义的cell(取代UITabelviewCell)
(4)通过数组数据,给cell内容附值
2.索引栏制作和使用
(1)基本创建
<一>searchControl对象创建
<二>searchBar栏目frame设置(只有高度可以改变)
<三>加载到指定的视图中
self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
(2)代理添加
<一>协议声明
<二>协议关联
<三>协议方法实现
@interface ViewController ()<UISearchResultsUpdating>
self.searchController.searchResultsUpdater = self;
-(void)updateSearchResultsForSearchController:(UISearchController *)searchController{}
(3)索引字符处理
<一>使用NSPredicate做字符串的匹配
<二>注意:数组中的元素为字符串元素
NSString *searchString = [self.searchController.searchBar text];
NSPredicate *preicate = [NSPredicate predicateWithFormat:@”SELF CONTAINS[c] %@”, searchString];
if (self.searchList!= nil) {
[self.searchList removeAllObjects];
}
//过滤数据
self.searchList = [NSMutableArray arrayWithArray:[self.dataArray filteredArrayUsingPredicate:preicate]];
//刷新表格
[self.tableview reloadData];
NSString * searchString = self.mySearchController.searchBar.text;
NSPredicate * preicate = [NSPredicate predicateWithFormat:@”SELF CONTAINS[c] %@”,searchString];
NSMutableArray *mArray = [NSMutableArray array];
for (NSDictionary * dic in self.dataArray) {
NSString * string = dic[@”name”];
[mArray addObject:string];
}
self.dataListArray = [mArray filteredArrayUsingPredicate:preicate];
[self.myTableView reloadData];
(4)搜索后出现搜索栏中的tableview,使用active区分
<一>通过searchController的active属性区分是否调用搜索栏
<二>如果调用了搜索栏,就通过过滤后的数组显示数据
<三>如果没有,则用原来的数据显示tableview
3.添加组头
#pragma mark – 设置段头标题和段尾标题
– (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return _indexArray[section];//section
}
//设置段尾标题
– (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
return [_indexArray[section]
stringByAppendingString:@” 结束“];
}
//在段头添加任意一个视图
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
view.backgroundColor = [UIColor yellowColor];
return view;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 20.0;
}
4.快速索引s
#pragma mark – 索引
//作用: 可以让我们快速的跳转到某个段(return的Array元素数量为section的数量)
– (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return _indexArray;
}
5.中文转拼音
入参数:NSString:@“中文”; fromString
出参数:[ms subStringToIndex:1],可变数组的第一个字符
-(NSString *)changeString:(NSString *)fromString
{
NSMutableString *ms = [[NSMutableString alloc]initWithString: fromString];
if (CFStringTransform((__bridge CFMutableStringRef)ms,0, kCFStringTransformMandarinLatin, NO))
{
NSLog(@”Pingying: %@”, ms);
}
if (CFStringTransform((__bridge CFMutableStringRef)ms,0, kCFStringTransformStripDiacritics, NO))
{
NSLog(@”Pingying: %@”, [[ms uppercaseString]substringToIndex:1]);
}
return [ms substringToIndex:1];
}
(1)第一个把每个人名都找到人名的首字符
(2)制作一个字典:key为name -人名 ;key为firstLater - 首字母
(3)根据首字母把相应的dic归类(A到Z的for循环)
(4)用dataArray嵌套(26字符数组)
tableview如何显示
(1)组头应该是dic中任意一个元素的key为firstLater的首字母
(2)把每个dataArray的数组,都取其中一个元素的首字母作为索引数组的元素(26个)
一 自定义的
Plist中的数据放到数组中
NSString * path= [[NSBundle mainBundle]pathForResource:@”data” ofType:@”plist”];
self.dataArray = [[NSArray alloc]initWithContentsOfFile:path];
注册一个cell
self.cellIdentify = @”Cell”;
[self.myTableView registerNib:[UINib nibWithNibName:@”myCellTableViewCell” bundle:nil] forCellReuseIdentifier:@”Cell”];
myCellTableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:self.cellIdentify];
if (cell == nil) {
cell = [[[NSBundle mainBundle]loadNibNamed:@”myCellTableViewCell” owner:self options:nil]firstObject];