UI 即 UserInterface(用户界面
1.iOS系统版本,每年都有更新.对我们开发者而言,主要的是观察API的变化.
2.iPhone新手机发布,会产生不同尺寸的屏幕,现在市面上有4种尺寸,我们需要考虑屏幕适配问题.
3.iOS系统层级,分为4层.目前我们学习的就是最顶层Cocoa touch层(layer),我们使用的是UIKit框架
4.iOS SDK(软件开发工具包).iOS开发语言OC,Swift——都是面向对象.

5.我们最简单的创建UI项目的方法就是通过storyboard(故事版)来完成.
6.我们可以通过设置故事板上面的控件属性(右边栏,第四个按钮——属性设置)

7.
—模拟器的输入模式切换:command+shift+K
—模拟器大小的切换:command+1,2,3
—模拟器锁屏:command+L
—模拟器Home键:command+shift+H

www.stackOverFlow.com
github.com
cocoaChina.com
code4app.com
编程查资料最好用Google

 
 
 
 
 
 
 
 
 
一.程序的生命周期
 
 1.程序已经完成启动。在这个方法里完成项目必要的界面加载
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
创建Xcode工程选中singleView模板,并且做好相应设置,设置好主窗口,和主窗口的根控制器。相当于该方法隐藏的设置好了上述。
2.程序将要辞去活跃状态(进入非活跃状态)
- (void)applicationWillResignActive:(UIApplication *)application
程序不再是用户可以操作的时候,进入非活跃(双击Home键)
 
 暂停游戏(在这里暂停一些任务)
3.程序已经进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application
 程序完全看不见了,进入后台。程序挂起
 程序由用户自己结束的时候,先进入后台
 4.程序将要进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application
从后台进入前台就会调用这个方法
 重新开始被暂停的游戏(游戏继续)
5.程序已经变为活跃
- (void)applicationDidBecomeActive:(UIApplication *)application 
        1.在程序启动的时候会调用一次。
        2.从后台回到前台
        3.从任务管理界面回到前台
6.程序将要结束
- (void)applicationWillTerminate:(UIApplication *)application
·1. 程序结束的时候
 2. 程序自己崩溃的时候
 3.如果时机合适,你可以做一些数据储存类的工作
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
  程序接受到内存警告(系统发送,如果一直占用过高,系统会直接杀掉进程)
 
 
二.登录界面
 
1.视图已经加载(视图控制器完成它所拥有的视图加载)
- (void)viewDidLoad {      [super viewDidLoad];.......在这行代码之后,添加额外的控件}
2.改变视图的背景颜色(UIColor 颜色对象)
 self.view.backgroundColor = [UIColor greenColor];
3.设置标签的文本内容      logInLabel.text = @"登录界面";
4.设置文本内容对齐方式,碰到不认识的属性(类)按住Command点进去看
 logInLabel.textAlignment = NSTextAlignmentCenter;
5.将label放到屏幕上,给视图添加一个子视图(参数是要添加的视图对象)
 [self.view addSubview:logInLabel];
6.计算、更新密码输入框所需要的结构体
 // 不能直接更改结构体内部的值,所以我们用一个新的变量取出这个结构体
 CGRect rect = passwordLabel.frame;
 // 改变CGRect类型结构体的原点x值
 rect.origin.x += 65.0;
 // 改变CGRect类型结构体的宽度值
三.启动界面与启动图
 
1.启动界面:App lcons Source —>用App prepo将图片处理成2x,3x的格式,然后将图片拖入到Apploce当中,最后在运行。
2.启动图:
 
     
方法一:首先将图片直接拖入到Xcode当中,然后在LaunchScreen.storyboard当中,点击界面,然后选择size,确定屏幕的大小,在viewController中将Image
View拖入到界面当中,将图片放大到与屏幕同大小,最后在Image当中导入图片。
 
        方法二:在Xcode中进入项目Launch  Image Source —>Use Asset Catalog —>migrate,点击箭头,最后将图片导入。
 
四.iOS坐标系
1. 创建一个Label,放在屏幕上
 UILabel * label = [[UILabel alloc] init];
2.设置label的位置信息
   CGRectMake()
  @param X 横轴坐标
  @param Y 纵轴坐标
  @param width 视图的宽度
  @param height 视图的高度
3. 创建window ,设置window的大小为屏幕大小
 self.myWindow1 = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20)];
 
 4.设置window的背景颜色
 self.myWindow1.backgroundColor = [UIColor blackColor];
 
 5.设置成app的主窗口并且可见
 [self.myWindow1 makeKeyAndVisible];
 
 6. 设置window的根控制器
  self.window.rootViewController = [[UIViewController alloc] init];
 self.myWindow1.rootViewController = [[ViewController alloc] init];
 self.myWindow1.windowLevel = UIWindowLevelStatusBar;
7. 一个窗口创建之后,默认是normal级别
 如果调整窗口的级别,会改变显示顺序
self.myWindow1.windowLevel = UIWindowLevelStatusBar;
状态栏其实是一个很小的窗口,他的级别是 UIWindowLevelStatusBar
8..视图:将子视图放到父视图上的时候,坐标系以父视图左上角为原点
  .默认!子视图是可以超出父视图的范围的
9.frame, bounds和Center
            frame得到的范围,是以父视图为参照(决定位置和尺寸)
            bounds以自身为参照(决定视图的尺寸)
             Center 以父视图为参照(决定视图的位置)
10.bounds就是frame的原点为0的值是错的,比如在旋转当中。
 
11.回收键盘
[self.numberTextField1 resignFirstResponder];    单个文件输入结束之后回收键盘
 [self.view endEditing:YES];   全部输入结束之后回收键盘 
 
12.如果需要应用到数字的时候,首先将text文本转化为整型数据,然后再计算等,最后再将结果转化为字符串的形式,并且赋值给所要结果的地方
 
13.Ctrl +windows+方向键    实现类的切换
 
14. 将视图添加到窗口上, 获取程序的包(和项目源代码文件夹不同)
 NSBundle * bundle = [NSBundle mainBundle];
 
15. 获取包目录    bundle.bundlePath;
 
 加载包里面的Nib文件,返回值是数组,里面存了很多个view
 /*
  * 加载包中的Nib文件
  * 
  * @param NSString Nib文件的名称
  * @param id 加载出来的文件所有者
  * @param NSDictionary 加载的时候所需要的附加信息
  */
 NSArray * viewArray = [bundle loadNibNamed:@"View" owner:self options:nil];
 
16. 获取数组中的视图
 [viewArray firstObject];         UIView * view = viewArray[0];
 
 17.添加上去作为子视图
 [self.window addSubview:view];
 
五.xib加载视图
 
1.首先创建一个xib,iOS—>User Interface—View,
 
2. 将视图添加到窗口上, 获取程序的包(和项目源代码文件夹不同)
 NSBundle * bundle = [NSBundle mainBundle];
3. 获取包目录       bundle.bundlePath;
4.加载包里面的Nib文件,返回值是数组,里面存了很多个view,加载包中的Nib文件
   @param NSString Nib文件的名称
  @param id 加载出来的文件所有者
  @param NSDictionary 加载的时候所需要的附加信息
  NSArray * viewArray = [bundle loadNibNamed:@"View" owner:self options:nil];
5. 获取数组中的视图 
         [viewArray firstObject];    UIView * view = viewArray[0];
6. 添加上去作为子视图   [self.window addSubview:view];
六 .视图树
 
1.视图的层次结构:一个视图可以拥有几个子视图,但一个视图只能拥有一个父视图。
2.建立层级关系:父子关系,子视图会覆盖父视图,同层级的子视图,如果发生堆叠,那么根据先后顺序来摆放(先添加的在下面,后添加的在上面)。
3. 添加一个子视图,放入指定的索引位置
 [baseView insertSubview:insertSubview1 atIndex:2];
4.指定在XX视图之上
        [baseView insertSubview:insertSubview1 aboveSubview:subView1];
5.如果使用insertSubview:aboveSubview: 父视图和基于的子视图为相同,那么相当于直接添加
        [baseView addSubview:insertSubview1];
6.指定在XX视图之下
         [baseView insertSubview:insertSubview1 belowSubview:subView2];
7.延迟调用方法
[self performSelector:@selector(test:) withObject:subView2 afterDelay:5];
 @param SEL 方法签名
  * @param id 附带的参数
  * @param delay 延迟的时间间隔
 
8. 调整已有视图层次结构 Exchang : 交换
 [baseView exchangeSubviewAtIndex:<#(NSInteger)#> withSubviewAtIndex:<#(NSInteger)#>]
 9.拿到最前面
[baseView bringSubviewToFront:<#(nonnull UIView *)#>]
10. 送到最后面
 [baseView sendSubviewToBack:<#(nonnull UIView *)#>]
11.获取一个视图的子视图数组和父视图
 父视图.subviews      子视图.superview
七。UIView的常用属性
 
1.通过tag值在视图树中找到相应的视图
 UIView * view = [self.view viewWithTag:1001];
2. red green blue alpha(透明度)
      RGB 值范围0~255 但在这里范围是0~1
       alpha 透明度 范围0~1
0 - 1,默认是1 表示不透明,0全透明,透明度会影响子视图
 baseView.alpha = 0.5;
 
     [UIColor colorWithRed:255/255.0 green:0/255.0 blue:0/255.0 alpha:100];
3. 透明色      [UIColor clearColor];
4.设置背景颜色
         baseView.backgroundColor = [UIColor redColor];
5.视图是否隐藏(YES表示隐藏:默认为NO)  default: 默认
             baseView.hidden = YES;
6.给视图对象添加标记
baseView.tag = 1002;
八.坐标系统的转换
 
1.拿到视图的transform 
 
CGAffineTransform  transform =self.变化的属性名.transform;
定义CGAffineTransform 变量,CGAffineTransform   t
2.构造一个在原有基础上平移的transform
 
   * 具有返回值,CGAffineTransform类型
   * @param transform 基于的transform
   * @param tx x轴变换
   * @param ty y轴变换
  
  t = CGAffineTransformTranslate(transform, 0, 50);
3.在原有基础上旋转的transform
t=CGAffineTransformRotate(transform, 角度M_PI)     
4.缩放
self.属性名.transform=CGAffineTrandformScale(self.属性名.transform,x轴缩放距离,y轴缩放距离)
5.产生效果    赋给要移动的对象transform      sel.属性名.transform =t
 
九.属性动画
 
1.设置图片,附带图片名称,默认只支持.png格式,其他格式需要加上后缀,最后在添加到视图上。
 
self.imageView.image=[UIVmage imageNamed:@“图片名称”];
 
一.首尾式动画
1.标记动画的开始
 [UIView beginAnimations:nil context:nil];
 
2.设置动画的属性
 [UIView setAnimationDuration:0.8];   时间   
 
 [UIView setAnimationRepeatCount:100];      重复次数  
 
 [UIView setAnimationRepeatAutoreverses:YES];     是否返回
3.动画的结束      [UIView commitAnimations];
 
二.block动画
 
1.[UIView animateWithDuration:0.8 animations:^{
 block中也可以添加动画属性
  [UIView setAnimationRepeatCount:100];
 
 这里写动画的内容
  self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, M_PI_4);
 }];
 
 self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, 0, 50);
 
 
 设置一段完成之后的回调
 
[UIView animateWithDuration:0.8 animations:^{
 这里写动画的内容
  self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, M_PI_4);
  
  
 } completion:^(BOOL finished) {
   self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, 0, 50);
 }];

 

 UILabel

 
 
1.创建及其确定位置大小
UILabel *label=[UILabel  alloc]initWithFram.CGRectMake:(  10,20, 30, 40);
2.设置标签
label.test=@“ 内容   ”;
3.行数设置,如果设置为大于0的值,那么代表最多可显示行。 0 表示没有行数限制,只要范围足够,自动换行
                label.numberOfLines = 0;
4. 设置文本的字体,美工给的字号如果你觉得太大了,可以认为他给的是px单位,我们直接把字号除以2。
        a. 常规
                label.font = [UIFont systemFontOfSize:字体大小]; 
       b.加粗
                  label.font = [UIFont boldSystemFontOfSize:字体大小]; 
 
5.根据label宽度调整字体
            label.adjustsFontSizeToFitWidth = YES;
6.根据字体去适配合适的label尺寸(要先设置内容,其次设置行数没有限制。字体也要先设置好)
                    【label   sizeToFit】;
7.对齐方式
     NSTextAlignmentLeft 左对齐
     NSTextAlignmentCenter 居中
     NSTextAlignmentRight 右对齐
 
    textLabel.textAlignment = NSTextAlignmentCenter;
 
8.label宽度不够时,对文本进行打断的方式
 
label.lineBreakMode = NSLineBreakByTruncatingHead;
 
9.设置文本的阴影
 
label.shadowColor = 【UIColor   grayColor】;  阴影部分的颜色
label.shadowOffset = CGSizeMake(5,5);    阴影部分的大小
 
10.当文本变为高亮状态以后,显示的颜色-------高亮状态(设置了并没有立即变换状态)
 
label.highlightedTextColor = 【UIColor  greenColor】;
 
[self performSelector:@selector(changeLabelColor:) withObject:textLabel afterDelay:5];     延迟方法的调用
 
【self.view    addSubview:label】;   将label添加到视图中
- (void)changeLabelColor:(UILabel *)label {
 label.highlighted = !label.highlighted;
}
 
UIImageView
            
1.添加显示图片,如果是png格式 ,则不需要添加后缀。
            UIImage * image = [UIImage imageNamed:@"图片名称"];
2.设置图片视图的内容模式
UIViewContentModeScaleToFill                 拉伸铺满视图,不在乎图像比例
UIViewContentModeScaleAspectFit           自适应拉伸,不破坏宽高比,如果宽/高沾满视图,另外一边不再进行缩放
 UIViewContentModeScaleAspectFill          不破坏宽高比,可以超出视图范围
3.裁剪圆,设置半径
//imageView.contentMode = UIViewContentModeCenter;
imageView.layer.cornerRadius = 半径;
4.与内容裁剪配置
      imageView.clipsToBounds = YES;
5.设置tag值                imageView.tag = 1001;
 
UIButton
 
1.UIButton * btn = [UIButton buttonWithType:UIButtonTypeSystem];
 btn.frame = CGRectMake(10, 10, 44, 44);
 btn.backgroundColor = [UIColor redColor];
2.相当于IB上的方法连线
 /* 给按钮添加方法
  *
  * id ---- 谁调用方法
  * SEL ---- 调用的方法
  * UIControlEvent ----- 触发时机
[btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
 
3.按钮添加文字
 [btn setTitle:@"切换" forState:UIControlStateNormal];
4. 作为子视图添加-----按钮是默认不能使用
// [self.view addSubview:btn];
 [imageView addSubview:btn];
5.如果一个按钮作为一个ImageView的子视图,默认是无法点击的
  UIImageView默认是不相应用户交互
  设置交互后,会影响子视图(如果imageView可以交互,他所有的子视图,也可以相应交互)                imageView.userInteractionEnabled = YES;
6.手动创建按钮
// UIButton * btn = [UIButton buttonWithType:UIButtonTypeSystem];
 // 使用alloc方法创建的按钮默认状态为custom
 UIButton * btn = [[UIButton alloc] init];
 btn.frame = CGRectMake(200, 200, 200, 200);
 btn.backgroundColor = [UIColor darkGrayColor];
7.绑定目标动作
 [btn addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];
8.设置按钮的标题
 [btn setTitle:@"普通状态" forState:UIControlStateNormal];
UIControlStateHighlighted    高亮状态
UIControlStateSelected        选中状态
UIControlStateDisabled       禁用状态,当enable == NO的时候,按钮成为disabled状态
9.设置按钮的图片
 
  * setImage:forState:使用的是图片的原始大小。让按钮显示的更加精致,如果frame够大,点击也方便
  *setBackgroundImage:forState:把图片设置为按钮幕后的背景,会拉伸图片
UIImage * image = [UIImage imageNamed:@"playing_btn_love@2x"];
[btn setImage:image forState:UIControlStateNormal];
10.设置标题的颜色,自定义设置下,默认颜色为白色,系统状态下,默认颜色为蓝色
// [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
 
11.选中状态改变
 sender.selected = !sender.selected;
12. 按钮是否可以使用 继承与UIControl的属性,可以改变界面效果
// sender.enabled = !sender.enabled/NO;
13.是否可以与用户交互,来自于UIView。 不影响外观
// sender.userInteractionEnabled = NO;
 
 
 
 
 
 
  UIControl
 
 
1.UIControl  他是UIView的子类, 可以会用他的子类来做具体的控制, 子类可以使UIkit框架类的,我们也可以自定义控件对象
 
2.为控件绑定一个目标,动作,触发时机
  * 可以是一个控件 绑定多个目标动作
  * 可以有多个控件 绑定一个目标动作
  *
  * @param id 可以是任意目标相应
  * @param action 一个消息
  * @parm Event 事件
 
 [control addTarget:self action:@selector(controlAction:) forControlEvents:UIControlEventTouchUpInside];
 
3. 触摸取消(触摸还在发生,屏幕失去焦点:锁屏,电话呼入)
        UIControlEventTouchCancel
 
4.开始追踪
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)event {
 
 UITouch 触摸对象。指代触摸。(简单的理解为触摸在屏幕上的手指)
 
 获取触摸所在视图上的点
 CGPoint touchPoint = [touch locationInView:self.superview];
 NSLog(@"%@", NSStringFromCGPoint(touchPoint));
 
 
 TouchEvent-----UIControlTouchUpDown
 TouchDown
 NSLog(@"开始追踪触摸");
 return YES;
}
 
5.继续追踪
- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)event {
 获取触摸所在视图上的点
 CGPoint touchPoint = [touch locationInView:self];
 NSLog(@"%@", NSStringFromCGPoint(touchPoint));
 
 if (touchPoint.x > self.bounds.size.width || touchPoint.y > self.bounds.size.height) {
  NSLog(@"触摸点在外部");
 }
 //TouchDrag
 
// NSLog(@"继续追踪触摸");
 
 return YES;
}
 
6.结束追踪
- (void)endTrackingWithTouch:(nullable UITouch *)touch withEvent:(nullable UIEvent *)event {
 // 获取触摸所在视图上的点
 CGPoint touchPoint = [touch locationInView:self];
 NSLog(@"%@", NSStringFromCGPoint(touchPoint));
 // 判断一个触摸点是否在矩形区域内
 if (touchPoint.x > self.bounds.size.width || touchPoint.y > self.bounds.size.height) {
  NSLog(@"UIControlEventTouchUpOutside");
  
  // 可以在恰当的时机发送valueChange
  [self sendActionsForControlEvents:UIControlEventTouchUpOutside];
 }
 // TouchUp
 NSLog(@"结束追踪触摸");
}
7.取消追踪
- (void)cancelTrackingWithEvent:(nullable UIEvent *)event {
 // TouchCancel
 NSLog(@"失去焦点");
}
 
 
  UITextField
 
1.外框风格
 textField.borderStyle = UITextBorderStyleRoundedRect;
2.设置或者获取输入框内容
// textField.text = @"hello";
3.设置字体大小及其居中
 textField.font = [UIFont systemFontOfSize:28];
 textField.textAlignment = NSTextAlignmentCenter;
4.输入提示
 textField.placeholder = @"请输入手机号";
5.是否支持清除按钮
 /*
  * UITextFieldViewModeNever, ------ 永远不出现
  * UITextFieldViewModeWhileEditing, ------当编辑的时候出现
  * UITextFieldViewModeUnlessEditing -----当结束编辑时出现
  * UITextFieldViewModeAlways ----- 一直出现
  */
 textField.clearButtonMode = UITextFieldViewModeUnlessEditing;
 6.编辑之前清除
textField.clearsOnBeginEditing = YES;
7.安全输入
// textField.secureTextEntry = YES;
8.设置右下角return 类型
 textField.returnKeyType = UIReturnKeyDone;
9.是否可用
// textField.enabled = NO;
10.给输入框添加动作
 [textField addTarget:self action:@selector(textEditing:) forControlEvents:UIControlEventEditingDidBegin];
11.设置输入框的代理
 textField.delegate = self;
12.代理方法
- (void)textEditing:(UITextField *)tf {
 NSLog(@"开始编辑");
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
 
 NSLog(@"将要开始编辑");
 return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField {
 
 NSLog(@"已经开始编辑");
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
 
 NSLog(@"将要结束编辑");
 return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
 
 NSLog(@"已经结束编辑");
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
 
 // 新内容所在的位置---长度为0
 NSLog(@"range :%@", NSStringFromRange(range));
 
 // 新输入的内容
 NSLog(@"string :%@", string);
 
 
 if (range.location <= 10) {
  return YES;
 }
 // 如果返回NO的话,字符内容不发生变化。依然会接受
 return NO;
}
- (BOOL)textFieldShouldClear:(UITextField *)textField {
 return YES;
}
 
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
 
 // 模拟应用效果
 // 用户点击返回按钮,收起键盘/发送消息
 [textField resignFirstResponder];
 NSLog(@"%@", textField.text);
 return YES;
}
- (void)didReceiveMemoryWarning {
 [super didReceiveMemoryWarning];
 
}
 
UIAlertView
 
1.UIAlertView的创建
   *
   * @param Title 标题
   * @param Message 文本提示信息
   * @param delegate 代理----
   * @param cancelTitle 取消按钮标题
   * @param otherTitle 其他按钮标题
 
 UIAlertView
* alertView = [[UIAlertView alloc] initWithTitle:@"小明要上课"
message:@"小明上课迟到了" delegate:self cancelButtonTitle:@"什么事都没有"
otherButtonTitles:@"罚站", nil];
 
2. UIAlertViewStyleDefault
// UIAlertViewStyleSecureTextInput,
// UIAlertViewStylePlainTextInput,
// UIAlertViewStyleLoginAndPasswordInput
 
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
 
 [alertView show];
3.* UIAlertController的初始化
  *
  * @param Title 标题内容
  * @param Message 提示文本信息
  * @param UIAlertControllerStyle 弹窗显示样式
  */
 UIAlertController
* alertView = [UIAlertController alertControllerWithTitle:@"定位信息"
message:@"您没有开启GPS定位,请前往设置开启"
preferredStyle:UIAlertControllerStyleAlert];
 
 // handle --- 处理
 // 弹窗按钮
 UIAlertAction
* alertAction1 = [UIAlertAction actionWithTitle:@"确定"
style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull
action) {
  NSLog(@"确定按钮点击");
 }];
 
 UIAlertAction
* alertAction2 = [UIAlertAction actionWithTitle:@"取消"
style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull
action) {
  NSLog(@"取消按钮点击");
 }];
 
 
 UIAlertAction
* alertAction3 = [UIAlertAction actionWithTitle:@"用户不知道点什么"
style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull
action) {
  NSLog(@"瞎点了一个按钮");
 }];
 
 
 // 弹窗按钮要起作用一定要添加到alertController
 [alertView addAction:alertAction1];
 [alertView addAction:alertAction2];
 // [alertView addAction:alertAction3];
 
 [self presentViewController:alertView animated:YES completion:nil];
 
UISlider
 
 
1. 添加事件----一定要手动滑动滑块
 [slider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];
 
 
 2. 设置最小值和最大值(歌曲 总时长:3:20 = 3 * 60 + 20)
 slider.minimumValue = 0;
 slider.maximumValue = 200; // 假设总时长是200
 
 [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(playAction:) userInfo:slider repeats:YES];
 
 
3.自定义滑块
 // 左右轨迹,大头针
 slider.minimumTrackTintColor = [UIColor cyanColor];
 slider.maximumTrackTintColor = [UIColor blackColor];
 
 // 设置轨迹图片
// [slider setMinimumTrackImage:<#(nullable UIImage *)#> forState:UIControlStateNormal];
// [slider setMaximumTrackImage:<#(nullable UIImage *)#> forState:<#(UIControlState)#>]
 
 slider.thumbTintColor = [UIColor redColor];
 // 设置大头针图片
 [slider setThumbImage:[UIImage imageNamed:@"Star-Gold"] forState:UIControlStateNormal];
 
 
 
   模态页面
 
1.调用方法模态呈现界面
  * @param UIViewControll 将要呈现的视图控制器页面
  * @param animated 弹出效果是否有动画
  * @param completion 完成之后的回调
  */
// presentViewController:<#(nonnull UIViewController *)#> animated:<#(BOOL)#> completion:<#^(void)completion#>
 
2.弹出方式
UIModalTransitionStyleCoverVertical 垂直弹出
 UIModalTransitionStyleFlipHorizontal 水平翻转
 UIModalTransitionStyleCrossDissolve 渐入渐出
 UIModalTransitionStylePartialCurl 竖直翻页
 
3.模态页面的消失
         [self dismissViewControllerAnimated:YES completion:nil];
 
 
 
 
    导航控制器的创建
 
1.设置不同视图控制器页面的导航栏标题,一定要有导航控制器来管理
 self.title = @"设置";
 
2.push使用导航控制器 弹出下一级页面
 [self.navigationController pushViewController:vc animated:YES];
 
3.返回导航控制器上一级页面
 [self.navigationController popViewControllerAnimated:YES];
 
 
 
 
 
 
   UINavigationBar
 
1.  每一个导航控制器有一个导航栏
 
  导航控制器可以管理N个子控制器
 
  每一个自控制器都有一个相对于的导航项(UINavigationItem)
 
 每一页面导航栏的内容, 由导航项决定
 
自定义导航栏----iOS6.0,iOS7.0高度不同
 
 7.0之后高度是64. 20 + 44
 
 7.0之前导航栏是不透明的,iOS7.0之后导航栏是半透明
 
2. 自定义视图
 UIButton * leftButton = [UIButton buttonWithType:UIButtonTypeCustom];
 leftButton.frame = CGRectMake(0, 0, 44, 44);
 [leftButton setBackgroundImage:[UIImage imageNamed:@"134859qtpkqk5tgcwnzpzt.jpg"] forState:UIControlStateNormal];
 创建出来的button需要转化成导航栏适用UIBarButtonItem
 UIBarButtonItem * leftItem1 = [[UIBarButtonItem alloc] initWithCustomView:leftButton];
 设置导航栏左侧按钮
self.navigationItem.leftBarButtonItem = leftItem;
self.navigationItem.leftBarButtonItem = leftItem1;
 self.navigationItem.leftBarButtonItems = @[leftItem, leftItem1];

3.设置导航栏右侧按钮
 实际上不是视图,是导航栏上的一块内容,可以绑定不同的视图和动作
 self.navigationItem.rightBarButtonItem
 
4.获取导航栏
 UINavigationBar * bar = self.navigationController.navigationBar;
 使用backgroundColor设置没有效果
 
5.设置导航栏的背景颜色
                             bar.barTintColor = [UIColor magentaColor];
 
6.  tintColor设置导航栏上子控件的默认内容颜色
                             bar.tintColor = [UIColor whiteColor];
 
7. // 设置导航栏样式,默认时:状态栏会是黑色
 // black时:状态栏是白色
                             bar.barStyle = UIBarStyleBlack;
 
 
8. 导航栏7.0之后默认是半透明,我们可以通过设置导航栏是否透明,改变controller.view的起点
                                bar.translucent = NO;
 
 
  标签栏
1.自定义标签栏之前,首先要将系统自带的按钮删除,然后在自己创建
    for (UIView * subView in self.tabBar.subviews) {
      [subView removeFromSuperview];
     }
2.设置背景图片,tabBar自带的 属性,可以帮我们设置大小和和位置还有父视图
     self.tabBar.backgroundImage = [UIImage imageNamed:@"navbg"];
3.自定义多个按钮需要利用for循环来循环创建
 
 
 
 
 滑动视图
 
1.创建滑动视图
     UIScrollView * scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,     0,         414, 300)];
 2.设置内容尺寸,只设置滑动方向
     scrollView.contentSize = CGSizeMake(3 * 414, 0);
3.利用for循环来创建,如果视图的位置超出了scrollView.contentSize范围,视图依旧加载,但是用户不能滑到相应位置,上面需要添加显示的内容
 
4.设置分页效果     scrollView.pagingEnabled = YES;
 
5.设置水平和垂直滚动条
     scrollView.showsHorizontalScrollIndicator = NO;
     scrollView.showsVerticalScrollIndicator = NO;
6.获取滑动视图内容的偏移量,用 Point 表示位置,实际是内容偏移的X Y轴
         scrollView.contentOffset
7.签订代理   scrollView.delegate = self;
 
8.已经滑动方法
 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
 
 CGPoint point = scrollView.contentOffset;
获取偏移量
 NSLog(@"当前偏移量 :%@", NSStringFromCGPoint(point));
}
 
   页码控件 
 
1.页码控件的创建
self.pageCtrl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, kScreenHeight - 20.0, kScreenWidth, 20.0)];
 2.页码数  
    self.pageCtrl.numberOfPages = 5;
3.当前选中页面
     self.pageCtrl.currentPage = 0;
4.未选中点颜色
 ·    self.pageCtrl.pageIndicatorTintColor = [UIColor blueColor];
5.当前点的颜色
     self.pageCtrl.currentPageIndicatorTintColor = [UIColor redColor];
6.将要结束滑动
 
-
(void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint
*)targetContentOffset NS_AVAILABLE_IOS(5_0) {
 
 // 目标偏移量
 CGPoint point = *targetContentOffset;
 
 // 当前页面数 = 当前偏移量 / 屏幕宽度
 NSInteger pageNum = point.x / kScreenWidth;
 
 // 将页码控件的当前页面值设为计算后的值
 self.pageCtrl.currentPage = pageNum;
}
 
7.滑动视图已经停止减速
//- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
// NSLog(@"滑动停止,处于静止状态");
// 
// // 当前偏移量
// CGPoint point = scrollView.contentOffset;
//
// // 当前页面数 = 当前偏移量 / 屏幕宽度
// NSInteger pageNum = point.x / kScreenWidth;
//
// // 将页码控件的当前页面值设为计算后的值
// self.pageCtrl.currentPage = pageNum;
}
8.如果需要无线滑动,需要在左右两边各多方一张图片,然后通过改变偏移量来改变滑动位置,内容一般写在已经滑动或者减速结束之后里面
 
  内边距问题
 
1.系统自动帮我调整了scrollView中视图内容的位置,不设置的话,视图会乡下移动64个像素。将导航栏设置为不透明效果,可以解决自动向下偏移内边距的问题
      self.automaticallyAdjustsScrollViewInsets = NO;
2.控制器四周延伸布局
     self.edgesForExtendedLayout = UIRectEdgeNone;
3.内边距偏移量不对的问题,只会出现在UIScrollView及其子类上
 问题原因:导航栏占据了64个像素,导航栏是半透明效果,并且融入了状态栏
 
 
图片的缩放
 
1.首先签订协议,然后创建手势
    UITapGestureRecognizer * tapGes = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureAction:)];
 
2.设置点击次数
     tapGes.numberOfTapsRequired = 2;
3. 添加相对应的手势操作,设置手势的依赖视图
     [self.scrollView addGestureRecognizer:tapGes];
 
4.手势的方法
- (void)tapGestureAction:(UITapGestureRecognizer *)tap {
 
 // 设置缩放倍数
// self.scrollView.zoomScale = 2.0;
 
 if (self.scrollView.zoomScale > 1.0) {
// self.scrollView.zoomScale = 1.0;
  [self.scrollView setZoomScale:1.0 animated:YES];
 } else if (self.scrollView.zoomScale < 1.0) {
// self.scrollView.zoomScale = 1.0;
  [self.scrollView setZoomScale:1.0 animated:YES];
 } else {
// self.scrollView.zoomScale = 2.0;
  [self.scrollView setZoomScale:2.0 animated:YES];
 }
 
5.指定将要缩放的视图是对应的imageView
    - (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
 
 return [self.view viewWithTag:101];
}
 
 
 
  UITableView
 
1.创建UITableView的时候使用initWithFrame:style:
 // 风格是必须要设置
 // 默认状态创建出来的tableView
 // 使用plain是可以显示很多格子(假格子)
 // 如果使用group风格,那么视图的背景颜色会发生变化,并且默认没有格子显示
UITableView * tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
 
2.想要对单元格进行操作,需要设置数据源协议
     tableView.dataSource = self;
3.单元格事件都和代理相关
 tableView.delegate = self;
 
4.指定组数,在group情况下,你有几组TableView,默认情况下,组数为1
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
 
 return 1;
}
 
5.指定每一组单元格的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
 
 return 10;
}
 
6.实现每一行的单元格
// 返回单元格,返回NSIndexPath所指向位置的单元格
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 
// UITableViewCell * cell = [[UITableViewCell alloc] init];
 
 // 简单的实现,暂时不考虑复用问题
 UITableViewCell * cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
 
 cell.backgroundColor
= [UIColor colorWithRed:arc4random_uniform(255) / 255.0
green:arc4random_uniform(255) / 255.0 blue:arc4random_uniform(255) /
255.0 alpha:1];
 
 // indexpath:每一次都会指定单元格的位置,返回单元格的方法会回调多次,使indexPath位置不同
  // indexPath.section // 组索引
  // indexPath.row // 行索引
 // 设置第3行和第10行的单元格颜色为黑
 if (indexPath.row == 2 || indexPath.row == 9) {
// cell.backgroundColor = [UIColor blackColor];
 }
 
 // 自带的textLabel就可以显示文字
 cell.textLabel.text = [NSString stringWithFormat:@"这是第%ld行", indexPath.row];
 // 自带的图片,效果会顶满整个cell
 cell.imageView.image = [UIImage imageNamed:@"134859qtpkqk5tgcwnzpzt.jpg"];
 
 return cell;
 
}
 
7.点击单元格触发代理方法,根据indexPath参数可以判断点击的单元格是哪一个
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
 
 if (indexPath.row == 2) {
  NSLog(@"第3行被点了");
 } else {
 
  NSLog(@"我被点了");
 }
}
 
8.设置表视图顺序的索引,显示索引名称,比如联系人后面的字母
- (nullable NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView {
 
 return self.provincesArray;
}
 
9.UITableView的组头和组尾标题
// 这里的字符串是表视图加载的时候回全部加载,注意:数组越界
- (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
 return self.provincesArray[section];
}
- (nullable NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
return section;
}
 
10.如果使用新的复用方法,在tableView创建的时候就要注册单元格
 
  @param Class 将要复用的单元格类,这个类只能是UITableViewCell及其子类
   @param Identifier 复用标示
11.只要需求单元格,就会调用这个方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 
 // 重复创建单元格的话,如果有100个单元格,那么需要创建100次
// [[UITableViewCell alloc] initWithStyle: reuseIdentifier:nil]
 
 // 使用可复用的单元格,让表视图去复用池中查询 是否有可用的单元格,如果复用池中有可复用的单元格,就直接返回。如果没有,则自己创建新的单元格
// UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell-01"];
// NSLog(@"row %ld .tag : %ld",indexPath.row, cell.tag);
// 
// 
// if (!cell) {
// cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell-01"];
// }
 
 
 // iOS新的复用单元格方法
 UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell-01" forIndexPath:indexPath];
 
 cell.tag = indexPath.row + 1;
 cell.textLabel.text = [NSString stringWithFormat:@"%ld", indexPath.row];
 
 return cell;
}
 
12.对于组头视图而言,一定要给TableView的组头规定高度
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
 // *******没有使用复用头视图进行创建********
 
// if (section == 0) {
// // 在组头视图中,返回的视图不需要设置大小
// UIView * view = [[UIView alloc] init];
// view.backgroundColor = [UIColor redColor];
//  
//
UIScrollView * scrollView = [[UIScrollView alloc]
initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width,
150)];
// scrollView.contentSize = CGSizeMake(5 * [UIScreen mainScreen].bounds.size.width, 0);
// [view addSubview:scrollView];
//  
//  
// for (int i = 0; i < 5; i++) {
//
UIImageView * imageView = [[UIImageView alloc]
initWithFrame:CGRectMake(i * [UIScreen mainScreen].bounds.size.width, 0,
[UIScreen mainScreen].bounds.size.width, 150)];
// imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d", i]];
// [scrollView addSubview:imageView];
// }
//  
//  
//  
// return view;
// } else if (section == 1) {
// return nil;
// } else {
// return nil;
// }
 
13.可以根据section参数,对不同的组头高度进行设置
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
   if (section == 0) {
      return 150;
   } else if (section == 1) {
      return 300;
   } else {
      return 0;
   }
}
 
  UITableView和Cell的常用属性
 
 
1.当直接使用UITableViewController时,系统会自动帮我们添加数据源协议和代理协议,并且设置代理对象为self。同时,系统默认帮我添加了一些方法
 
2.对tableView进行的设置是相对全局设置,所有的都会遵循  行高
  self.tableView.rowHeight = 100;
 
3.设置背景图片
 
UIImageView * imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"100.jpg"]];
 self.tableView.backgroundView = imageView;
 
使用颜色将图片进行展示
// self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"100.jpg"]];
 
 
4.分割线的颜色
 
 self.tableView.separatorColor = [UIColor redColor];
 
5.None:没有分割线 singleLine:单行 singleLineEtched:虚线                       self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
 
6.分割线只能够左右调整
 self.tableView.separatorInset = UIEdgeInsetsMake(1, 3, 50, 10);
 
7.表视图的头视图
 // 表头和组头不一样,必须要设置frame大小
 UIView * view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 150)];
 view1.backgroundColor = [UIColor purpleColor];
 self.tableView.tableHeaderView = view1;
 
8.cell背景图    cell.backgroundView = imageView;
 
 
9.选中风格
cell.selectionStyle = UITableViewCellSelectionStyleNone;
 
10.cell选中背景图  如果设置了选中样式为none,那么选中图片也不会有显示
 UIImageView * imageViewSelected = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tableCell_common_tapped"]];
 cell.selectedBackgroundView = imageViewSelected;
 
11.单元格的辅助视图
 
   UITableViewCellAccessoryNone,
      UITableViewCellAccessoryDisclosureIndicator--向右箭头
   UITableViewCellAccessoryDetailDisclosureButton--详情按钮
   UITableViewCellAccessoryCheckmark,--对勾
 
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton
 
12.选中单元格
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
 
}
 
 
13.辅助视图button 方法
 
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
 
 NSLog(@"第%ld行的按钮", indexPath.row);
 
 // 获取对应的cell
 UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
 // 更改单元格上的辅助视图
// cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
 
}
14.想要针对不同的单元格设置不同的单元格高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
 
 if (indexPath.row == 0) {
  return 10;
 } else if (indexPath.row == 3){
  return 150;
 } else {
  return 100;
 }
 
}
 
编辑模式
 
 
1.是否允许用户在编辑模式下进行选中单元格操作
 self.tableView.allowsSelectionDuringEditing = YES;
 
2.多选
self.tableView.allowsMultipleSelectionDuringEditing = YES;
 
3.是否开启编辑模式
 [self.tableView setEditing:sender.selected animated:YES];
 
 
4.改变编辑风格
 
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
 
 return UITableViewCellEditingStyleDelete;
}
 
5.单元格数目变化,在这个方法里面完成
// 自带向左轻扫手势,会弹出删除,向左滑动会弹出删除
-
(void)tableView:(UITableView *)tableView
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath {
 
 if (editingStyle == UITableViewCellEditingStyleDelete) {
  // 开始tableView内容的更新,需要和结束方法成套的使用,有开始更新就一定要有结束更新(否则不会产生效果),在方法之间的更新,一定要更新数据源
  [tableView beginUpdates];
  
  // 1.改变数据源
  [self.mutableArr removeObjectAtIndex:indexPath.row];
  
  // 2.改变界面元素---》对表视图中的数据进行刷新
  [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
  
 
  
  [tableView endUpdates];
 } else if (editingStyle == UITableViewCellEditingStyleInsert) {
 
  
 }
}
 
6.复写此方法,可以直接移动单元格,对单元格重新排序
-
(void)tableView:(UITableView *)tableView
moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath
toIndexPath:(NSIndexPath *)destinationIndexPath {
 
}
 
 
UICollectionView
 
1创建UICollectionView
  layout:布局.
 
      UICollectionView * collectionView = [[UICollectionView alloc]
initWithFrame:self.view.bounds collectionViewLayout:layout];
2.UICollectionViewLayout这个类只是一个基类,只提供方法和属性,但是不提供布局信息
 UICollectionView Layout * layout = [[UICollectionViewLayout alloc] init];
 // 流水布局 一般采用流水布局
UICollectionViewFlowLayout * layout = [[UICollectionViewFlowLayout alloc] init];
3.设置单元格大小
layout.itemSize = CGSizeMake(44, [UIScreen mainScreen].bounds.size.height);
4.每行的间距
// layout.minimumLineSpacing = 1;
 // 每个单元格之间的间距
// layout.minimumInteritemSpacing = 1;
5.设置滑动方向
 layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
6.集合视图 跟表视图一样都要注册 
[collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:cellID];
7.collectionView同样需要数据源方法来提供单元格
 collectionView.dataSource = self;
 collectionView.delegate = self;
8.组数的设置
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
 return 20;
}
9.- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
 
 // 在collectionView中,对复用更加的强调,我们一定要使用复用单元格的方法来进行复用,并且是使用新方法来进行复用,我们一定要进行单元格的注册
// UICollectionViewCell * cell = [[UICollectionViewCell alloc] init];
 UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
 
 
 cell.backgroundColor = [UIColor greenColor];
 
 return cell;
}
 
 
 
 
 
 
 

iOS中UI阶段常用的一些方法的更多相关文章

  1. 06 (OC)* iOS中UI类之间的继承关系

    iOS中UI类之间的继承关系 此图可以更好的让你去理解iOS中一些底层的关系.你能够了解以及理解UI类之间的继承关系,你会更加明白苹果有关于底层的东西,更有助于你的项目开发由它们的底层关系,就能更加容 ...

  2. iOS中几种常用的数据存储方式

    自己稍微总结了一下下,方便大家查看 1.write直接写入文件的方法 永久保存在磁盘中,可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据 ...

  3. iOS开发UI篇 -- UISearchBar 属性、方法详解及应用(自定义搜索框样式)

    很多APP都会涉及到搜索框,苹果也为我们提供了默认的搜索框UISearchBar.但实际项目中我们通常需要更改系统默认搜索框的样式.为了实现这一目标,我们需要先搞懂 UISearchBar 的属性及方 ...

  4. iOS开发-UI (一)常用控件

    从这里开始是UI篇 知识点: 1.常用IOS基本控件 2.UITouch ======================= 常用基本控件 1.UISegmentedControl:分段控制器 1)创建方 ...

  5. IOS中Json解析的四种方法

    作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验 ...

  6. iOS中UIKit的外观属性及方法汇总

    这里将UIKit的外观属性及方法从头文件中抽取出来,以便查找及熟悉.(更新到iOS 8.0,从A-Z排序) UIActivityIndicatorView @property (readwrite,  ...

  7. Java中字符串的常用属性与方法

    •字符串常用的属性 string.length()————>返回字符串的长度,int类型. •字符串常用的方法 String.contains(";")——————>判 ...

  8. 【转】IOS中Json解析的四种方法

    原文网址:http://blog.csdn.net/enuola/article/details/7903632 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有 ...

  9. IOS中延迟执行的几种方法

    前几天去国美在线面试,就遇到了上面的问题,当时是笔试,只写出来了第一种方法,现在整理了一下. //1.performSelector方法:在当前线程中执行的方法,使用默认模式,并延迟执行@select ...

随机推荐

  1. 更改Visual Studio 2015 默认的语言设置

    Vs支持多种语言,但有可能创建项目时,默认的开发语言不是你需要的,比如:默认是Visual C++ 你可以通过"工具"----选项----导入和导出设置来修改. 引用: https ...

  2. JDBC的操作

    package com.liuxianglin.demo.util; import java.sql.Connection; import java.sql.DriverManager; import ...

  3. SJGestureUnlock快速集成手势解锁

    前言:如果页面显示不完整或图片看不了还请移步:简书 SJGestureUnlock.h 常用自定义属性 @interface SJGestureUnlock : UIView @property (n ...

  4. iOS---用Application Loader 上传的时候报错No suitable application records were found. Verify your bundle identifier 'xx' is correct

    用Application Loader 上传的时候报错,突然发现用Application Loader的账号 竟然不是公司的账号  换成公司的账号 就可以了.

  5. Shou 团队诚意满满的招募 Swifter

    一.团队介绍 团队产品 VPlayer 播放器靠自增长 3 年内获得全球 4000 万用户,开发的 Vitamio 组件更是获得微博.UC.金山等知名企业授权使用.—— 团队再次起航,经历一年多我们已 ...

  6. Android 监听ScrollView的滑动

    我们需要监听ScroView的滑动情况,比如滑动了多少距离,是否滑到布局的顶部或者底部.可惜的是SDK并没有相应的方法,不过倒是提供了一个 protected void onScrollChanged ...

  7. Git 常见的命令操作

    克隆                git clone git地址 查看分支         git branch 查看git库状态  git status 切换分支         git  che ...

  8. SELECT CAST(GETDATE() AS VARCHAR(10)) 显示不同格式的原因

    开发人员测试时,发现生产服务器与测试服务器执行SELECT CAST(GETDATE() AS VARCHAR(10))语句显示的格式不一样.如下所示 Server A Server B 其实出现这个 ...

  9. WinForm:DataGridViewButtonColumn的使用

    1. 添加 DataGridViewButtonColumn DataGridViewButtonColumn dgv_button_col = new DataGridViewButtonColum ...

  10. 【转载】Java垃圾回收机制

    原文地址:http://www.importnew.com/19085.html Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联 ...