• ios之UIPickView


    以下为控制器代码,主要用到的是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

     

    效果图:

     

     

  • 相关阅读:
    mac单机 k8s minikube ELK yaml 详细配置 踩坑
    springboot es 配置, ElasticsearchRepository接口使用
    Docker 搭建 ELK 日志记录
    空杯心态
    与友人谈
    mac单机, jenkins-master在集群k8s外, k8s内部署动态jenkins-slave, jnlp方式. 踩坑+吐血详细总结
    Anyproxy 代理前端请求并mock返回 二次开发 持续集成
    Oracle 设置TO_DATE('13-OCT-20', 'dd-MON-yy'), 报错 ORA-01843: 无效的月份
    allure-java 二次开发 添加自定义注解, 并修改@step相关aop问题
    Appium添加Listener运行报错
  • 原文地址:https://www.cnblogs.com/yulang314/p/3550387.html
Copyright © 2020-2023  润新知