以下为控制器代码,主要用到的是UIPickerView

主要步骤:新建一个Single View Application

然后,如上图所示,拖进去一个UILabel Title设置为导航,再拖进去一个UILabel,用于显示效果,最后拖进去一个UIPickerView,设置好代理和dataSource,这应该都会。往后就是在代码中实现效果。代码注释很详细,看看都会懂,然后结合API,就可以举一反三了。自己也是慢慢学习的,然后自己练得。嘿嘿多多学习。加油!!!

#import <UIKit/UIKit.h>

@interface sdsViewController : UIViewController<UIPickerViewDelegate,UIPickerViewDataSource>
//这是显示效果的label
@property (retain, nonatomic) IBOutlet UILabel *textLabel;

//字体大小数组 
@property(nonatomic,retain) NSArray *fontArray;

//字体颜色数组 
@property(nonatomic,retain) NSArray *colorArray;

//字体大小数组 
@property (nonatomic, retain)NSArray *sizeArray;
@end

//
//  sdsViewController.m
//  UIPickerView
//
//  Created by Ibokan on 12-8-18.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import "sdsViewController.h"

@implementation sdsViewController 
@synthesize textLabel; 
@synthesize fontArray;
@synthesize colorArray;
@synthesize sizeArray;

- (void)didReceiveMemoryWarning 
{
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad 
{
    [super viewDidLoad];
    //设置所有字体
    self.fontArray=[UIFont familyNames];
    
    //设置字体大小数组
    self.sizeArray=[NSArray arrayWithObjects:@"12",@"16",@"20",@"24",@"30",@"35",@"40",nil];
    
    //设置颜色数组
    self.colorArray=[NSArray arrayWithObjects:[UIColor redColor],[UIColor blueColor],[UIColor clearColor],[UIColor yellowColor],[UIColor brownColor], [UIColor blackColor],[UIColor purpleColor],[UIColor orangeColor],[UIColor darkGrayColor],[UIColor magentaColor],[UIColor darkTextColor],[UIColor brownColor],[UIColor lightGrayColor],nil];

// Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload 
{
    //重新指向
    [self setTextLabel:nil];
    self.colorArray=nil;
    self.fontArray=nil;
    self.sizeArray=nil;
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)viewWillAppear:(BOOL)animated 
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated 
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated 
{
    [super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated 
{
    [super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (void)dealloc { 
    
    //销毁对象
    [textLabel release];
    [fontArray release];
    [colorArray release];
    [sizeArray release];
    [super dealloc];
}

#pragma mark - 
#pragma mark UIPickerViewDelegate  UIPickerViewDataSource

//以下是适配器部分,即数据源

//返回有几列 
-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    NSLog(@"调用%s ,%d",__FUNCTION__,__LINE__);
    
    //返回有几列 ,注意
    return 3;
    
}

//返回指定列的行数 
- (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
     NSLog(@"调用%s ,%d",__FUNCTION__,__LINE__);
    
    if (component==0) {
        return  [self.fontArray count];
    } else if(component==1){
        
        return  [self.colorArray count];
    }
    else if(component==2){
        return [self.sizeArray count];
        
    }
    
    return 0;
}

//以下是代理部分,可以自定义视图

//返回指定列,行的高度,就是自定义行的高度 
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
    
   NSLog(@"调用%s ,%d",__FUNCTION__,__LINE__);
    
    
    return  40;
}

//返回指定列的宽度 
- (CGFloat) pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
     NSLog(@"调用%s ,%d",__FUNCTION__,__LINE__);
    if (component==0) {
        //第0列,宽为180
        return  180;
    } else if(component==1){
        //第1列,宽为80
        return  80;
    }
    else{
        //第三列宽为60
        return 60;
    }
    
}

// 自定义指定列的每行的视图,即指定列的每行的视图行为一致 
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
    
     NSLog(@"调用%s ,%d",__FUNCTION__,__LINE__);
    
    
    //思想就是:先创建一个View以指定列的宽度,和所在列行的高度,为尺寸
    //再建立一个label,在这个view上显示字体,字体颜色,字体大小,然后,把这个label添加到view中
    //返回view,作为指定列的每行的视图
    
    
    
    //取得指定列的宽度
    CGFloat width=[self pickerView:pickerView widthForComponent:component];
    
    //取得指定列,行的高度
    CGFloat height=[self pickerView:pickerView rowHeightForComponent:component];
    
    //定义一个视图
    UIView *myView=[[UIView alloc] init];
    
    //指定视图frame
    myView.frame=CGRectMake(0, 0, width, height);
    
    UILabel *labelOnComponent=[[UILabel alloc] init];
    
    labelOnComponent.frame=myView.frame;
    labelOnComponent.tag=200;
    
    
    if (component==0) {
        //如果是第0列
        
        //以行为索引,取得字体
        UIFont *font=[self.fontArray objectAtIndex:row];
        //在label上显示改字体
        labelOnComponent.text=[NSString stringWithFormat:@"%@",font];
        
    }
    else if(component==1){
        //如果是第1列
        //以说选择行为索引,取得颜色数组中的颜色,并把label的背景色设为该颜色
        labelOnComponent.backgroundColor=[self.colorArray objectAtIndex:row];
       
    }
    else if(component==2){
        //如果是第2列
        //label 上显示的是相应字体
        
        labelOnComponent.text=[self.sizeArray objectAtIndex:row];
      
      }
    
    [myView addSubview:labelOnComponent];
    
    //内存管理,建立后释放 
    [labelOnComponent release];
    [myView autorelease];
    
    return myView;
    
}

- (void)pickerView:(UIPickerView *)pickerView 
      didSelectRow:(NSInteger)row
       inComponent:(NSInteger)component
{
    //取得选择的是第0列的哪一行
    int rowOfFontComponent = [pickerView selectedRowInComponent:0];
    //取得选择的是第1列的哪一行
    int rowOfColorComponent = [pickerView selectedRowInComponent:1];
    //取得选择的是第2列的哪一行
    int rowOfSizeComponent = [pickerView selectedRowInComponent:2];
    
    //取得所选列所选行的视图
    UIView *ViewOfFontComponent = (UILabel *)[pickerView viewForRow:rowOfFontComponent forComponent:0];
    UIView *ViewOfColorComponent =(UILabel *) [pickerView viewForRow:rowOfColorComponent forComponent:1];
    UIView *ViewOfSizeComponent = (UILabel *)[pickerView viewForRow:rowOfSizeComponent forComponent:2];

//取得取得所选行所选列上的视图的子视图
    UILabel *viewOnViewofFontComponent=(UILabel *)[ViewOfFontComponent viewWithTag:200];
    UILabel *viewOnViewOfColorComponent=(UILabel *)[ViewOfColorComponent viewWithTag:200];
    UILabel *viewOnViewOfSizeComponent=(UILabel *)[ViewOfSizeComponent viewWithTag:200];
    
    
    //最后将所选择的结果展现在label上,即字体样式,字体颜色,字体大小
    
    self.textLabel.font=[UIFont fontWithName:viewOnViewofFontComponent.text size:[viewOnViewOfSizeComponent.text floatValue]];
    
    self.textLabel.textColor=viewOnViewOfColorComponent.backgroundColor;
    
       
  
    
    
}

@end

效果图:

ios之UIPickView的更多相关文章

  1. IOS UIPickView+sqlite 选择中国全部城市案例

    1.案例简单介绍 通过读取文件.将中国全部城市写入sqlite数据库中,现通过UIPickView实现中国全部城市的选择,效果图例如以下所看到的 2.城市对象模型 中国全部城市数据请看http://b ...

  2. iOS基础问答面试

    <简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...

  3. iOS pickerView(所有类型一网打尽)

    概述 关于PickView的所有类型都在这里 详细 代码下载:http://www.demodashi.com/demo/11017.html 首先看下项目的整体结构: 一.准备工作 UIPicker ...

  4. iOS 中这些是否熟练掌握——(2)

    接上一篇博文,本篇博文是作者原创,用于记录从网上查阅的一些资料,并对自己的知识体系进行一下总结,成文以供学习使用. 1.Cocoa Touch 包含了什么?不包含什么?与 Cocoa 有什么区别? 相 ...

  5. iOS可视化动态绘制连通图

    上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...

  6. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  7. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  8. iOS总结_UI层自我复习总结

    UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...

  9. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

随机推荐

  1. Quantitative proteomic analysis of small and large extracellular vesicles (EVs) reveals enrichment of adhesion proteins in small EVs (文献分享一组-柯酩)

    文献名:Quantitative proteomic analysis of small and large extracellular vesicles (EVs) reveals enrichme ...

  2. Java 虚拟机(Java Virtual Machine)

    Java 编译器将 Java 程序编译成虚拟机能够识别的二进制代码,这种代码称为字节码(Bytecode).字节码就是虚拟机的机器指令,它与平台无关,有统一的格式,不依赖于具体的硬件环境,只运行在 J ...

  3. CF1110F Nearest Leaf

    传送门 这是我第二次看见这个题目了,第一次看见是另一场比赛的A题,想了一个小时不会写就弃了 从来没想过这个题能这么玩 线段树上记录根到叶子节点的距离 初始线段树上先记下根节点1到各叶子节点的距离 先离 ...

  4. 最长上升子序列LIS(云笔记图片版)

  5. 转 PHP 正则表达式 以及案例

    2.Perl兼容的语法扩充 Perl兼容的正则表达式的模式类似于Perl中的语法,表达式必须包含在定界符中,除数字.字母.反斜线外的任何字符都可以作为定界符.例如,表达式’/^(?i)php[34]/ ...

  6. Sonar静态代码扫描环境搭建(Windows10)

    一.环境配置: 1.jdk安装及配置 2.MySQL数据库安装----直接调用服务器院端的MySQL数据库,在此基础上创建新的数据库sonar.  数据库的配置如下: 3.sonar官网下载sonar ...

  7. c#操作ecxel的一些资源(downmoon搜集)

    c#操作ecxel的一些资源(downmoon搜集) 工作需要,邀月收集了几个操作excel的资源.  1.如何:使用 COM Interop 创建 Excel 电子表格(C# 编程指南)http:/ ...

  8. CentOS远程监控

    近日,因工作需要,学习了CentOS远程监控的水平有限,多指教. 远程访问CentOS,包括三种方式ssh,telnet,vnc. 本例涉及的是以vnc远程访问CentOS.指令在root下操作.注意 ...

  9. React项目搭建基于Karma的CI环境

    简介 在浏览Github的时候是否经常看到这样的CI图标呢? 本文即为介绍如何为基于React的项目配置CircleCI的自动化测试环境 源码在此 本地实现 项目依赖如下: "devDepe ...

  10. tar打包压缩命令

    1. tar命令 用法: tar [选项...] [FILE]... GNU ‘tar’将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件. 示例 tar -cf archiv ...