分类 iOS 下的文章

iOS自学笔记之plist文件

软硬件环境

  • macOS Sierra
  • Xcode 7.0.1

plist文件简介

iOS开发中经常会使用到plist文件,那么plist文件到底什么呢?plist的全称是Property List即属性列表文件。本质上它是一个XML文件。做过Android开发的童鞋肯定知道SharedPreference,plist就是iOS开发中的SharedPreference。plist文件一般用于存储用户设置的信息,其存储的信息量不宜过大,大数据量可以使用数据库,这个后面会学习到。

plist文件的读写操作

回到Xcode开发环境,我们创建一个iOS工程iOSPlistOpsDemo来具体操作plist文件,工程创建完毕,打开工程默认的info.plist文件来看看它到底长什么样子?

plist_01

如果你习惯了以代码的形式查看,可以右击info.plist —> Open As —> Source Code打开查看

plist_01

工程info.plist已经包含了一些iOS默认工程的设置,我们暂不使用它。这里新建一个plist文件djstava.plist,File —> New —> File —> iOS —> Property List,然后增加如下几条数据对

plist_01

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSString *path = [[NSBundle mainBundle] pathForResource:@"djstava" ofType:@"plist"];
    NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
    NSLog(@"%@",data);
}

编译后启动模拟器,会看到如下运行结果

plist_01

数据读取成功后,我们再来看看怎么讲数据写入到plist文件中

    [data setObject:@"Shanghai" forKey:@"location"];
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    
    NSString *fileName = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"djstava.plist"];
    
    NSLog(@"%@",fileName);
    
    [data writeToFile:fileName atomically:YES];

再次编译运行程序,按照打印出来的路径,找到对应的djstava.plist文件,打开查看是不是已经有数据了,如下图所示

plist_01

这里需要注意一点的是工程中的djstava.plist并没有改变。如果你嫌这样查看不方便,可以在数据写入后再将它读出来进行比较。

Info.plist文件的读写

Info.plist是工程的配置文件,在每个xcode工程创建时会自动生成一个,它保存这该工程的基本配置信息,你可以增加/删除配置项。Info.plist的信息读取和上面的实例基本类似

    //Info.plist
    //获取文件的全路径
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"];
    
    //解析 Info.plist
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
    
    //获取当前的版本号
    NSString *version = dict[@"CFBundleShortVersionString"];
    NSLog(@"%@",version);
    
    //获取storyboard文件
    NSString *storyFile = dict[@"UIMainStoryboardFile"];
    NSLog(@"%@",storyFile);

plist_01

源码下载

https://github.com/djstava/iOSLearning/tree/master/iOSPlistOpsDemo

iOS自学笔记之XIB的使用

软硬件环境

  • macOS Sierra
  • Xcode 8.2.1

前言

前面学习iOS编程时,画UI控件的时候用的都是直接敲代码的方式,基本都是先创建一个相应控件的对象,然后设置对象属性,最后添加相应的事件响应方法。那强大如Apple这样的公司有没有提供一种更方便、更易学的UI编写方法呢?答案是肯定的。那就是今天本文的主角XIB。它是一种可视化的方法,极大地降低了学习iOS编程的门槛。

XIB实践

创建一个名叫iOSXIBDemo的工程,打开工程info.plist文件,将Main storyboard file base name这个标签去掉,如下图所示

iOS_xib_01

创建一个iOS的Cocoa Touch类RootViewController,作为根视图控制器,它继承自UIViewController,并勾选上"Also create XIB file"选项

iOS_xib_02

iOS_xib_03

打开RootViewController.xib文件,从控件区中拖动一个UILabel和一个UIButton,界面上的操作就是这么简单,那XIB怎么跟代码同步呢?别着急,找到Xcode右上角的双环标记,单击它

iOS_xib_05

iOS_xib_06

这样在同一个画面就能同时看到XIB和RootViewController.m了,接着开始进行代码同步。找到XIB中的UILable对象,同时按住Ctrl键 + 鼠标左键,将光标移动到RootViewController.m中的@interface和@end之间放开,弹出对话框。这里Connection的类型,对于UILabel来说是选Outlet,而UIButton选的是Action。我的理解是的可以响应事件的控件就选Action

iOS_xib_07

iOS_xib_08

绑定完成后,在对应的代码前会有个实心圆。在UIButton点击响应时间函数加句打印

- (IBAction)mButton:(id)sender {
    NSLog(@"button clicked.") ;
}

接下来开始加载根视图控制器,修改AppDelegate.m中的didFinishLaunchingWithOptions方法,同时需要将RootViewController.h头文件import进来

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds] ;
    
    RootViewController* root = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:[NSBundle mainBundle]] ;
    
    self.window.rootViewController = root;
    
    [self.window makeKeyAndVisible] ;
    
    return YES;
}

最后代码执行的效果如下

iOS_xib_09

源码下载

https://github.com/djstava/iOSLearning/tree/master/iOSXIBDemo

iOS自学笔记之UISwitch和UITextField

软硬件环境

  • macOS Sierra
  • Xcode 7.0.1

UISwitch

UISwitch是一个状态转换的控件,包括打开和关闭2种状态,不同的状态相应地实现不同的业务逻辑。

- (void)viewDidLoad {
    [super viewDidLoad] ;
    // Do any additional setup after loading the view, typically from a nib.
    
    //创建一个UISwitch对象
    UISwitch* mySwitch = [[UISwitch alloc] init] ;
    
    //设置UISwitch的位置,注意,UISwitch的宽和高是无法改变的
    mySwitch.frame = CGRectMake(100, 100, 100, 40) ;
    
    //UI上那个点的颜色
    mySwitch.thumbTintColor = [UIColor redColor] ;
    
    //打开状态的颜色
    mySwitch.onTintColor = [UIColor blueColor] ;
    
    //UISwitch的初始状态
    //YES : 打开状态
    //NO : 关闭状态
    //mySwitch.on = YES ;
    
    //或者可以使用方法来设置,使用动画效果
    [mySwitch setOn:YES animated:YES] ;
    
    //响应事件
    [mySwitch addTarget:self action:@selector(switchPress) forControlEvents:UIControlEventValueChanged] ;
    
    [self.view addSubview:mySwitch] ;
 }

//UISwitch事件响应方法
- (void)switchPress {
    NSLog(@"switch is pressed.") ;
}

代码执行效果如下

uiswitch_01

UITextField

UITextField是一个可以输入文本的控件,类似于android中的Editline。

    //创建UITextField对象
    UITextField* textField = [[UITextField alloc] init] ;
    
    //设置位置
    textField.frame = CGRectMake(100, 300, 200, 40) ;
    
    //显示的文本
    textField.text = @"哈啰" ;
    
    //设置字体及大小
    textField.font = [UIFont systemFontOfSize:20] ;
    
    //设置文本的颜色
    textField.textColor = [UIColor blackColor] ;
    
    //提示文字,当textField.text为空时显示
    textField.placeholder = @"请输入文本..." ;
    
    //是否作为密码
    //YES : 显示圆点加密
    textField.secureTextEntry = NO ;
    
    //边框style
    textField.borderStyle = UITextBorderStyleRoundedRect ;
    
    //keyboard类型
    textField.keyboardType = UIKeyboardTypePhonePad ;
    
    [self.view addSubview:textField] ;

uitextfield_01

源码下载

https://github.com/djstava/iOSLearning/tree/master/iOSUISwitchAndUITextField

iOS自学笔记之UIStepper、UISegmentedControl和UITouch

软硬件环境

  • macOS Sierra
  • Xcode 7.0.1

UIStepper

UIStepper是步进器控件,根据设定的步长进行调整

    //创建一个UIStepper对象并设置其位置
    UIStepper* stepper = [[UIStepper alloc] initWithFrame:CGRectMake(100, 100, 80, 40)] ;
    
    //最小值
    stepper.minimumValue = 0 ;
    
    //最大值
    stepper.maximumValue = 100 ;
    
    //步进的幅度
    stepper.stepValue = 5 ;
    
    //持续响应事件
    stepper.autorepeat = YES ;
    
    //是否将步进结果通过事件响应函数反应出来
    stepper.continuous = NO ;
    
    //添加事件
    [stepper addTarget:self action:@selector(stepperPress:) forControlEvents:UIControlEventValueChanged] ;
    
    [self.view addSubview:stepper] ;

响应事件函数实现

//stepper响应事件
- (void)stepperPress:(UIStepper*)stepper {
    NSLog(@"stepper value:%f",stepper.value) ;
}

代码运行结果

uiswitch_01

UISegmentedControl

UISegmentedControl是iOS中的分栏控件,它类似于一个选择器,所有元素当中只可以选择一个。

    //创建一个UISegmentedControl对象并设置其位置
    UISegmentedControl* segControl = [[UISegmentedControl alloc] initWithFrame:CGRectMake(10, 300, 300, 40)] ;
    
    //添加3个元素
    [segControl insertSegmentWithTitle:@"简单" atIndex:0 animated:YES] ;
    [segControl insertSegmentWithTitle:@"一般" atIndex:1 animated:YES] ;
    [segControl insertSegmentWithTitle:@"困难" atIndex:2 animated:YES] ;
    
    //初始选中元素
    segControl.selectedSegmentIndex = 0 ;
    
    //添加事件
    [segControl addTarget:self action:@selector(segControlPress:) forControlEvents:UIControlEventValueChanged] ;
    
    [self.view addSubview:segControl] ;

事件响应函数

//UISegmentedControl事件响应函数
- (void)segControlPress:(UISegmentedControl*)segControl {
    NSLog(@"segControl %ld",segControl.selectedSegmentIndex) ;
}

代码执行结果

uiswitch_01

UITouch

//当手指触碰到屏幕时,执行该方法
- (void) touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"touchesBegan") ;
    
    UITouch* touch = [touches anyObject] ;
    if (touch.tapCount == 1) {
        NSLog(@"单击!") ;
    } else if (touch.tapCount == 2) {
        NSLog(@"双击!") ;
    }
}

//当手指在屏幕上滑动时,执行该方法
- (void) touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"touchesMoved") ;
}

//当手指离开屏幕时,执行该方法
- (void) touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"touchesEnded") ;
}

//当手指操作被其它事件中断时,执行该方法,如常见的来电中断
- (void) touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"touchesCancelled") ;
}

uiswitch_01

源码下载

https://github.com/djstava/iOSLearning/tree/master/iOSUIStepperAndUISegmentedControl

iOS自学笔记之UISlider

软硬件环境

  • macOS Sierra
  • Xcode 7.0.1

简介

UISlider即滑动条,经常用来表示某种状态的变化,比如说最常见的音量的调节、亮度的调节等等,是iOS中的基础控件,本文就是滑动条的简单使用。

动手实践

创建一个iOS工程iOSSlideDemo,在ViewController.m文件中输入

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    //创建一个UISlider,并指定其位置
    UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(100, 100, 100, 40)];
    
    //背景颜色
    slider.backgroundColor = [UIColor yellowColor];
    
    //UISlider滑过的颜色
    slider.tintColor = [UIColor blueColor];
    
    //UISlider上点的颜色
    slider.thumbTintColor = [UIColor redColor];
    
    //UISlider响应事件
    [slider addTarget:self action:@selector(sliderPress:) forControlEvents:UIControlEventValueChanged ];
    
    //UISlider的最小值
    slider.minimumValue = 0;
    
    //UISlider的最大值
    slider.maximumValue = 100;
    
    //为YES时,能持续看到UISlider的变化,
    //为NO时,只能在UISlider停止时看到变化
    //本例中,当continuous为YES时,控制台会一直打印当前UISlider的值,而为NO时,滑动过程中不打印值,当滑动停止时才打印
    slider.continuous = NO;
    
    [self.view addSubview:slider];
}

//事件响应方法
- (void)sliderPress:(id)sender{
    NSLog(@"%f",((UISlider*)sender).value);
}

代码运行结果如下

uislider_01

源码下载

https://github.com/djstava/iOSLearning/tree/master/iOSSlideDemo