UIPicker city.plist(实例)

前言: UIPickerView 是一个选择器控件, 它可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活。UIPickerView 直接继承了 UIView ,没有继承 UIControl ,因此,它不能像 UIControl 那样绑定事件处理方法, UIPickerView 的事件处理由其委托对象完成。

正文: UIPickerView 控件常用的属性和方法如下:

  numberOfComponents: 获取UIPickerView指定列中包含的列表项的数量。该属性是一个只读属性。

  showsSelectionIndicator: 该属性控制是否显示UIPickerView中的选中标记(以高亮背景作为选中标记)。

  numberOfRowsInComponent: 获取UIPickerView包含的列数量。

  rowSizeForComponent: 获取UIPickerView包含的指定列中列表项的大小。该方法返回一个CGSize对象。

  selectRow:inComponent:animated:: 该方法设置选中该UIPickerView中指定列的特定列表项。最后一个参数控制是否使用动画。

  selectedRowInComponent:: 该方法返回该UIPickerView指定列中被选中的列表项。

  viewForRow:forComponent:: 该方法返回该UIPickerView指定列的列表项所使用的UIView控件。

UIDatePicker控件只是负责该控件的通用行为,而该控件包含多少列,各列包含多少个列表项则由UIPickerViewDataSource对象负责。开发者必须为UIPickerView设置UIPickerViewDataSource对象,并实现如下两个方法。

  numberOfComponentsInPickerView:: 该UIPickerView将通过该方法来判断应该包含多少列。

  pickerView:numberOfRowsInComponent:: 该UIPickerView将通过该方法判断指定列应该包含多少个列表项。

如果程序需要控制UIPickerView中各列的宽度,以及各列中列表项的大小和外观,或程序需要为UIPickerView的选中事件提供响应,都需要为UIPickerView设置UIPickerViewDelegate委托对象,并根据需要实现该委托对象中的如下方法。

  pickerView:rowHeightForComponent:: 该方法返回的CGFloat值将作为该UIPickerView控件中指定列中列表项的高度。

  pickerView:widthForComponent:: 该方法返回的CGFloat值将作为该UIPickerView控件中指定列的宽度。

  pickerView:titleForRow:forComponent:: 该方法返回的NSString值将作为该UIPickerView控件中指定列的列表项的文本标题。

  pickerView:viewForRow:forComponent:reusingView:: 该方法返回的UIView控件将直接作为该UIPickerView控件中指定列的指定列表项。

  pickerView:didSelectRow:inComponent:: 当用户单击选中该UIPickerView控件的指定列的指定列表项时将会激发该方法

Interface Builder只支持为UIPickerView设置一个属性——Shows Selection Indicator,该属性用于控制是否显示UIPickerView中的选中标记(以高亮背景作为选中标记)。

@property(strong,nonatomic) UIPickerView *picker;
@property(strong,nonatomic) NSMutableArray *sheng;
@property(strong,nonatomic) NSMutableArray *shi;

@property(strong,nonatomic) NSArray *array;

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.sheng=[NSMutableArray array];
    self.shi=[NSMutableArray array];
    NSBundle *bundle=[NSBundle mainBundle];

NSString *path=[bundle pathForResource:@"city.plist" ofType:nil];

self.array=[NSArray arrayWithContentsOfFile:path];

for (NSDictionary *ar1 in self.array) {

NSArray *ar2=[ar1 objectForKey:@"Cities"];
        [self.sheng addObject:[ar1 objectForKey:@"State"]];
        for (NSDictionary *ar3 in ar2) {
//            NSLog(@"%@",[ar3 objectForKey:@"city"]);
        [self.shi addObject:[ar3 objectForKey:@"city"]];
           
        }
       
       
    }

self.picker=[[UIPickerView alloc]initWithFrame:CGRectMake(0, 200, 414, 300)];
    self.picker.backgroundColor=[UIColor greenColor];
   
    [self.view addSubview: self.picker];
    self.picker.delegate=self;
    self.picker.dataSource=self;
   
}

#pragma mark -数据源  nubertOfComponentsInPickerView:
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}

#pragma mark - 数据源 pickerView: attributedTitleForRow: forComponent:
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
   
 
   
    if (component==0) {
        return self.sheng.count;
    }
         return self.shi.count;
}

#pragma mark - 显示信息方法  delegate
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if (component==0) {
        return self.sheng[row];
       
    }
   
  
         return self.shi[row];
}
#pragma mark -选中行的信息
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if (component==0) {
        //清除上次选择地城市
        [self.shi removeAllObjects];
        NSDictionary *dic=[self.array objectAtIndex:row];
//          NSLog(@"%@",dic);
        NSArray *arr1=dic[@"Cities"];

NSMutableArray * arr2 =[NSMutableArray array];
        for (NSDictionary * dic in arr1) {
            [arr2 addObject:dic[@"city"]];
           
          
        }
        self.shi=arr2;
        [self.picker selectRow:row inComponent:0 animated:YES];
       
        [self.picker reloadComponent:1];
       
        }
    else {
        NSInteger firstRow=[self.picker selectedRowInComponent: 0];
        NSInteger secondRow=[self.picker selectedRowInComponent:1];
       
        NSString *firstString=[self.sheng objectAtIndex:firstRow];
        NSString *secondString=[self.shi objectAtIndex:secondRow];
       
       
        NSString *message=[NSString stringWithFormat:@"您确定要选择%@%@吗?",firstString,secondString];
        UIAlertController *alertMessage=[UIAlertController alertControllerWithTitle:@"提示" message:message preferredStyle:UIAlertControllerStyleAlert];
       
        UIAlertAction *cancle=[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
       
        UIAlertAction *ok=[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];
       
        [alertMessage addAction:cancle];
        [alertMessage addAction:ok];
        [self presentViewController:alertMessage animated:YES completion:nil];
        NSLog(@"%@%@",firstString,secondString);

}
   
       
    }

#pragma mark - 行高
-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
    if (component==0) {
         return  80;
    }
    return 50;

}

时间: 2024-10-29 19:05:44

UIPicker city.plist(实例)的相关文章

iOS: plist实例

1 // 2 // main.m 3 // OSXDemo0601_plist 4 // 5 // Created by yao_yu on 14-6-3. 6 // Copyright (c) 2014年 yao_yu. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 11 BOOL isfile(NSString *path) 12 { 13 NSFileManager *fileManager = [N

进击的雨燕--------------自动引用计数

Swift 使用自动引用计数(ARC)机制来跟踪和管理你的应用程序的内存.通常情况下,Swift 内存管理机制会一直起作用,你无须自己来考虑内存的管理.ARC 会在类的实例不再被使用时,自动释放其占用的内存. 然而,在少数情况下,ARC 为了能帮助你管理内存,需要更多的关于你的代码之间关系的信息.本章描述了这些情况,并且为你示范怎样启用 ARC 来管理你的应用程序的内存. 注意:引用计数仅仅应用于类的实例.结构体和枚举类型是值类型,不是引用类型,也不是通过引用的方式存储和传递. 自动引用计数的工

自动引用计数

http://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/chapter2/16_Automatic_Reference_Counting.html 本页包含内容: 自动引用计数的工作机制 自动引用计数实践 类实例之间的循环强引用 解决实例之间的循环强引用 闭包引起的循环强引用 解决闭包引起的循环强引用 Swift 使用自动引用计数(ARC)这一机制来跟踪和管理你的应用程序的内存.通常情况下,Swift 的内存管理机

OC-Day3____数组

2015.3.2 //数组 //NSArray(不可变数组) //数组:对象地址的有序集合 // int main(int argc, const char * argv[]) { @autoreleasepool { NSNumber *num1 = [NSNumber numberWithInt:12]; //数组对象创建 NSArray *array1 = @[@"one",@"two",@"three"]; NSLog(@"ar

IOS 初级数据持久化-沙盒机制

什么是数据持久化?数据的永久存储 为什么要坐数据持久化:存储在内存中的数据,程序关闭,内存释放,数据丢失,这种数据是临时的 数据初九化的本质:数据保存成文件,存储到程序的沙河中 1.沙盒机制 每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在IOS系统内都放在了统一的文件夹目录下 沙盒的本质就是一个文件夹,名字是随机分配的. 2.沙盒路径的位置 1.通过Finder查找程序沙盒相对的路径 通过代码查找程序沙盒相对路径 NSString *D

读书笔记 C# Linq查询之group关键字浅析

在C#中,自从有了Linq查询表达式后,程序员对可被迭代的序列或列表执行一系列的筛选.排序.过滤.分组.查询等操作.本文章所要讲述的是group关键字. Linq查询表达式,是以from关键字开头,以select或group关键字结尾,它们之中可以插入where.orderby.join.let甚至附加的from子句. group子句返回的是一个IGrouping<TKey,TElement>对象序列,请注意,是对象序列,而不是单个对象.由于group查询产生的IGrouping<TKe

【Swift学习】Swift编程之旅---ARC(二十)

Swift使用自动引用计数(ARC)来跟踪并管理应用使用的内存.大部分情况下,这意味着在Swift语言中,内存管理"仍然工作",不需要自己去考虑内存管理的事情.当实例不再被使用时,ARC会自动释放这些类的实例所占用的内存.然而,在少数情况下,为了自动的管理内存空间,ARC需要了解关于你的代码片段之间关系的更多信息.本章描述了这些情况,并向大家展示如何打开ARC来管理应用的所有内存空间. 注意:引用计数只应用在类的实例.结构体(Structure)和枚举类型是值类型,并非引用类型,不是以

JQuery AJAX: 了解jQuery AJAX

jQuery AJAX 一.简介1.AJAX是与服务器交换数据的技术,它在不重载全部页面的情况下,实现了对部分网页的更新.AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML).简短地说,在不重载整个网页的情况下,AJAX 通过后台加载数据,并在网页上进行显示.使用 AJAX 的应用程序案例:谷歌地图.腾讯微博.优酷视频.人人网等等. 2.jQuery 提供多个与 AJAX 有关的方法.通过 jQuery AJAX 方法,您能够使用

Swift常用语法示例代码(二)

此篇文章整理自我以前学习Swift时的一些练习代码,其存在的意义多是可以通过看示例代码更快地回忆Swift的主要语法. 如果你想系统学习Swift或者是Swift的初学者请绕路,感谢Github上The Swift Programming Language开源翻译的中文版,感谢极客学院wiki提供的PDF版本. 代码和PDF版本上传至Github,有兴趣的可以下载下来试试. SwiftEnum Swift枚举相比C语言更加灵活,除了成员值,还可以对成员赋原始值和相关值.Swift的枚举采用了很多