IOS 开发指南 第5章 委托协议 数据源协议 高级视图学习

1 委托对象负责控制控件的外观和对控件的事件和状态作出反应

数据源对象是控件与应用数据(model)的桥梁,一般是必须实现的。

2 选择器 UIPickerView 为用户提供选择

1)日期选择器 UIDatePicker

设置属性检查器中的各个属性-代码

-setDateFormat:设置日期格式

-stringFromDate:获取时间

- (IBAction)onclick:(id)sender {

    NSDate * theDate = self.datePicker.date;获取选中日期
    NSLog(@"the date picked is: %@", [theDate descriptionWithLocale:[NSLocale currentLocale]]);返回基于本地化的日期信息
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init] ;日期格式
    dateFormatter.dateFormat = @"YYYY-MM-dd HH:mm:ss";-setDateFormat:
    NSLog(@"the date formate is: %@", [dateFormatter stringFromDate:theDate]);
    self.label.text = [dateFormatter stringFromDate:theDate];

}

2)普通选择器UIpickerView  dateSource和delegate

**************

viewDidLoad:中是要准备默认(当前的显示数据),设置代理

**************

获取数据 :获取主目录 +mainBundle

获取资源路径 -pathForResource:ofType:

获取数据 -initWithContentsOfFile:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSBundle *bundle = [NSBundle mainBundle];
    NSString *plistPath = [bundle pathForResource:@"provinces_cities"
                                           ofType:@"plist"];
    //获取属性列表文件中的全部数据
    NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
    self.pickerData = dict;

    //省份名数据
    self.pickerProvincesData =  [self.pickerData allKeys];从字典中拿取全部key值

    //默认取出第一个省的所有市的数据
    NSString *seletedProvince = [self.pickerProvincesData objectAtIndex:0];
    self.pickerCitiesData = [self.pickerData objectForKey:seletedProvince];

    self.pickerView.dataSource = self;
    self.pickerView.delegate = self;

}

*********

一个key多个value值可以将value 值放入array中,再组成字典。

取出所有key-取出第一个key-取出这个key对应的value。

*********

动作方法:

-selectedRowInComponent:返回被选中拨盘的行数

- (IBAction)onclick:(id)sender {

    NSInteger row1 = [self.pickerView selectedRowInComponent:0];在第一个拨盘中的行数
    NSInteger row2 = [self.pickerView selectedRowInComponent:1];
    NSString *selected1 = [self.pickerProvincesData objectAtIndex:row1];根据行数取数据
    NSString *selected2 = [self.pickerCitiesData objectAtIndex:row2];

    NSString *title = [[NSString alloc] initWithFormat:@"%@,%@市",
                       selected1,selected2];

    self.label.text = title;

}

实现代理协议:

dataSource:

- numberOfComponentsInPickerView:返回拨盘数

-pickerView:numberOfRowsInComponent:返回每个拨盘的行数

delegate:

-pickerView:titleForRow:forComponent:为拨盘中的行提供显示数据 显示到某行时调用

-pickerView:didSelectRow:inComponent:选中行时调用

-reloadComponent:刷新拨盘并回调显示方法

#pragma mark 实现协议UIPickerViewDataSource方法
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 2;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView
        numberOfRowsInComponent:(NSInteger)component {
    if (component == 0) {//省份个数
        return [self.pickerProvincesData count];
    } else {//市的个数
        return [self.pickerCitiesData count];
    }

}

#pragma mark 实现协议UIPickerViewDelegate方法
-(NSString *)pickerView:(UIPickerView *)pickerView
            titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    if (component == 0) {//选择省份名
        return [self.pickerProvincesData objectAtIndex:row];
    } else {//选择市名
        return [self.pickerCitiesData objectAtIndex:row];
    }
}

- (void)pickerView:(UIPickerView *)pickerView
      didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    if (component == 0) {
        NSString *seletedProvince = [self.pickerProvincesData objectAtIndex:row];
        NSArray *array = [self.pickerData objectForKey:seletedProvince];
        self.pickerCitiesData = array;
        [self.pickerView reloadComponent:1];此时会回调上面的显示方法
    }
}

3 集合视图(网格视图)UICollectionView

结构:节,单元格(UICollectionViewCell类,布局由UICollectionViewLayout类定义),补充视图,装饰视图,控制器(UICollectionViewController)

准备:添加资源-删除viewController-添加collectionViewController到设计界面并设为Is Initial View Controller-修改viewController类为UICollectionViewController类并与界面关联-适配屏幕

设计并添加单元格:单元格就是一个视图,可以在其内部放置其他视图或控件。

新建单元格类并和设计界面的Collection View Cell关联起来-在单元格属性检查器中设置可重用单元格标示-在单元格尺寸检查器中设置单元格大小-设置Collection View尺寸检查器中的Cell Size值-在Cell视图中自定义吧-添加约束

@interface Cell : UICollectionViewCell 自定义Cell

@property (strong, nonatomic) IBOutlet UIImageView *imageView;
@property (strong, nonatomic) IBOutlet UILabel *label;

实现委托协议:

dataSource:

-numberOfSectionInCollectionView:节数目

-collectionView:numberOfItemInSection:节中的列数目

-collectionView:cellForItemAtIndexPath:为单元格提供显示数据

-collectionView:viewForSupplementaryElementOfkind:atIndexPath:为补充视图提供显示数据

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    NSBundle *bundle = [NSBundle mainBundle];
    NSString *plistPath = [bundle pathForResource:@"events"
                                           ofType:@"plist"];
    //获取属性列表文件中的全部数据
    NSArray *array = [[NSArray alloc] initWithContentsOfFile:plistPath];
    self.events = array;    

}
#pragma mark - UICollectionViewDataSource

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return [self.events count] / 2;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 2;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{   重用机制
    Cell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
    NSDictionary *event = [self.events objectAtIndex:(indexPath.section*2 + indexPath.row)];
    cell.label.text = [event objectForKey:@"name"];
    cell.imageView.image = [UIImage imageNamed:[event objectForKey:@"image"]];
    return cell;
}

#pragma mark - UICollectionViewDelegate
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSDictionary *event = [self.events objectAtIndex:(indexPath.section*2 + indexPath.row)];
    NSLog(@"select event name : %@", [event objectForKey:@"name"]);

}
时间: 2024-12-15 21:30:08

IOS 开发指南 第5章 委托协议 数据源协议 高级视图学习的相关文章

IOS开发指南 第6章 表视图 学习

1 概述 结构:表头视图(table header view),表脚视图(table footer view),节(section),单元格(cell) 相关类:UITableViewCell UITableViewController UITableViewHeaderFooterView 委托协议和数据源协议 分类:普通表视图:用于动态表 分组表视图:用于静态表,进行界面布局 单元格的组成:图标 标题 拓展视图 样式:拓展视图由枚举类型UITableViewCellAccessoryType

iOS开发指南 第8章 iOS常用设计模式 学习

设计模式是在特定场景下对特定问题的解决方案 1 单例模式 作用:解决“应用中只有一个实例”的问题,这个实例的作用是全局的,比如说是可以实现一些共享资源 方法的访问和状态的保持 实现原理:一般会封装一个静态属性,并提供静态实例的创建方法. *********** James Rumbaugh对类的定义是:类是具有相似结构.行为和关系的一组对象的描述符.类是面向对象系统中最重要的构造块.类图显示了一组类.接口.协作以及他们之间的关系. 建立类图的步骤: (1)研究分析问题领域确定系统需求. (2)确

iOS 开发指南 第16章 定位服务与地图应用之使用苹果地图

1 显示地图 MKMapView MKMapViewDelegate 准备:加载MapKit.framework 设置地图样式 代理-实现代理方法 - (void)viewDidLoad { [super viewDidLoad]; 设置样式,枚举类型MKMapType self.mapView.mapType = MKMapTypeStandard; // self.mapView.mapType = MKMapTypeSatellite; 将当前视图控制器赋值给地图视图的delegate属性

iOS 开发指南 第15章 访问Web Service之REST Web Service

***** 在电脑术语中,统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串. 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作.URI由包括确定语法和相关协议的方案所定义. Web上可用的每种资源 -HTML文档.图像.视频片段.程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位. ***** 1 REST Web Ser

iOS开发指南 第7章 视图控制器与导航模式 学习

1 概述 分类:平铺导航模式 标签导航模式 树形导航模式 2 模态视图 必须要一个单独的模态视图控制器 呈现 代码方法:presentViewController:animated:completion: 故事板segue方式 关闭 dismissViewControllerAnimated:completion: 获取navigationBar:拖拽一个 Editor-Embed in-Navigation Controller 创建一个navigation controller interf

IOS开发指南第四章 IOS8多分辨率屏幕适配 学习

1 获取IOS设备屏幕信息 CGSize iOSDeviceScreenSize = [UIScreen mainScreen].bounds.size; NSString *s = [NSString stringWithFormat:@"%.0f x %.0f", iOSDeviceScreenSize.width, iOSDeviceScreenSize.height]; 获取设备信息判断是否是ipone-判断横屏还是竖屏-判断设备型号 属性userInterfaceIdiom是

iOS 开发指南 第12章 应用程序设置

1 概述 设置中的项目在应用中是不经常变化的,它决定了应用的基本特征和行为. 配置是在应用内部开辟出来的功能块,是应用的一部分,项目是经常变化的. 2 应用程序设置包 Settings Bundle是一个包文件,其中含有设置界面中所需的项目的描述 用到的照片 文字的本地化 子设置项目的描述等内容.通过finder打开. Root.plist文件描述根设置界面中设置的项目信息. en.lproj文件夹和Root.strings文件是和本地化有关,用于设置界面信息的本地化. 创建:iOS-Resou

iOS 开发指南 第16章 定位服务与地图应用

1 定位服务编码 使用Core Location框架 CLLocationManger:用于定位服务管理类,能够给我们提供位置信息和高度信息,也可以监控设备进入或离开某个区域,还可以获得设备的运行方向等. CLLocation:封装了位置和高度信息. CLLocationMangerDelegate 准备:加载Core Location框架 修改工程配置:Supporting Files-Info.pist添加NSLocationAlwaysUSageDescription和NSLocation

iOS 开发指南 第11章 数据持久化之对象归档 学习

1 是一种序列化方式,先将归档对象序列化为一个文件,然后再通过反归档将数据恢复到对象中. 条件:该对象的类必须实现NSCoding协议,而且每个成员变量应该是基本数据类型或都是实现NSCoding协议的某个类的实例. 归档类NSKeyedArchiver 反归档类NSKeyedUnarchiver  NSData类提供了读取数据文件的方法 方法:+dataWithContentsOfFile: +dataWithContentsOfFile:options:指定读取数据选项error: -ini