`

iPhone开发自定义视图之ActionSheet中使用PickerView .

    博客分类:
  • ios
ios 
阅读更多
实现的功能:1)打开ActionSheet后展示PickerView,进行选择操作。

关键词:ActionSheet PickerView



1、新建一个Sigle View Application,命名为PickerInActionSheet,工程结构如下:

[img]

[/img]






2、修改ViewController.xib,添加一个TextField控件。





3、修改ViewController.h,如下:
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UIPickerViewDelegate,UIPickerViewDataSource>

@property(retain,nonatomic)UIPickerView *picker;
@property(retain,nonatomic)UIActionSheet *actionSheet;
@property(retain,nonatomic)IBOutlet UITextField *textField;

@property(nonatomic,retain)NSDictionary *appleDevices;  
@property(nonatomic,retain)NSArray *deviceCategory;  
@property(nonatomic,retain)NSArray *deviceName;  

-(IBAction)showActionSheet:(id)sender;
@end


连接输出口textField及操作showActionSheet,如下:
[img]

[/img]






4、修改ViewController.m,如下:

#import "ViewController.h"

#define kDeviceCategory 0  
#define kDeviceName 1 

@interface ViewController ()

@end

@implementation ViewController
@synthesize appleDevices;  
@synthesize deviceCategory;  
@synthesize deviceName; 
@synthesize picker;
@synthesize actionSheet;
@synthesize textField;

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

//初始化数据
-(void)initData{
    textField.placeholder = @"请点击。。。";
    textField.textAlignment = UITextAlignmentCenter;
    
    NSArray *array1 = [NSArray arrayWithObjects:@"iPhone",@"iPad",@"iPod",nil];  
    NSArray *array2 = [NSArray arrayWithObjects:@"Mac",@"iMac",@"Mac Mini",@"Mac Pro",nil];  
    NSDictionary  *dictionary= [NSDictionary dictionaryWithObjectsAndKeys:array1,@"Mobile",array2,@"Computers",nil];  
    appleDevices = [[NSDictionary alloc]initWithDictionary:dictionary copyItems:YES];  
    
    NSArray *components = [self.appleDevices allKeys];  
    NSArray *sorted = [components sortedArrayUsingSelector:@selector(compare:)];  
    self.deviceCategory = sorted;  
    
    NSString *selectedCategory = [self.deviceCategory objectAtIndex:0];  
    self.deviceName = [self.appleDevices objectForKey:selectedCategory];  
}

//初始化视图
-(void)showActionSheetPicker{
    //在title中加入多个换行,给picker留出空间,否则picker会盖住ActionSheet的button
    NSString *title = @"请选择设备\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
    actionSheet = [[UIActionSheet alloc] initWithTitle:title delegate:nil cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:nil,nil];
    
    picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 50, 320, 220)];
    picker.delegate = self;
    picker.dataSource = self;
    picker.showsSelectionIndicator = YES;
    
    [actionSheet addSubview:picker];
    [actionSheet showInView:self.view];
}

-(void)dealloc{
    self.deviceName = nil;
    self.deviceCategory = nil;
    self.appleDevices = nil;
    self.picker = nil;
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

//显示actionSheet
-(IBAction)showActionSheet:(id)sender{
    [self showActionSheetPicker];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    //强制用竖屏模式
    return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}


#pragma mark Picker Data Source Methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
	return 2;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    if(component == kDeviceCategory){  
        return [self.deviceCategory count];  
    }else{  
        return [self.deviceName count];  
    }  
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
	if(component == kDeviceCategory){  
        return [self.deviceCategory objectAtIndex:row];  
    }else{  
        return [self.deviceName objectAtIndex:row];  
    }  
}

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
    if(component==kDeviceCategory){
        return 150;
    }else{
        return 170;
    }
}
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
	return 35;
}

//显示picker中的数据
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    NSString *inputString;
    if(component == kDeviceCategory){  
        NSString *selectedCategory = [self.deviceCategory objectAtIndex:row];  
        NSArray *array = [self.appleDevices objectForKey:selectedCategory];  
        self.deviceName = array;  
        [self.picker selectRow:0 inComponent:kDeviceName animated:YES];  
        [self.picker reloadComponent:kDeviceName];  
        
        inputString = selectedCategory;
    }else if(component == kDeviceName){
        NSUInteger selectedCategoryRow = [pickerView selectedRowInComponent:kDeviceCategory];
        NSString *selectedCategory = [self.deviceCategory objectAtIndex:selectedCategoryRow];
        
        inputString = [NSString stringWithFormat:@"%@-%@",selectedCategory,[self.deviceName objectAtIndex:row]];
    }
    //给文本框设置值
    self.textField.text=inputString;
}  
	

- (void)didReceiveMemoryWarning {
	[super didReceiveMemoryWarning];	
}
@end





5、运行效果如下:
[img]

[/img]
[img]

[/img]
  • 大小: 44.2 KB
  • 大小: 68.1 KB
  • 大小: 70 KB
  • 大小: 93.4 KB
分享到:
评论

相关推荐

    ios-自定义pickerview.zip

    自定义pickerview

    安卓Android源码——PickerView.zip

    安卓Android源码——PickerView.zip

    ios-自定义pickerView.zip

    自定义pickerView,实现数据的实时获取

    PickerView.rar

    NULL 博文链接:https://gaojian020729.iteye.com/blog/1065581

    ios-自定义PickerView.zip

    底部弹出自定义选择器,用UIScrollView实现自定义。标题,按钮均可自定义,自己可根据需求修改封装的源码,可改性很强。

    安卓IOS风格相关-仿ios-pickerView.rar

    仿ios-pickerView.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    PickerView.zip

    PickerView.zip,Android滚动选择器控件,支持日期选择、时间选择、省市区联动选择。滚动效果流畅,支持丰富的自定义属性。

    基于Object-C实现的列表选择课程作业项目.zip

    pickerView.constraintPickerViewHeight.constant = 200; pickerView.titleBackgroundColor = [UIColor whiteColor]; pickerView.separatorColor = [UIColor redColor]; [pickerView.buttonLeft setTitle:@"左边" ...

    pickerview.zip

    pickerview.zip,One very very user-friendly Picker library(内部提供3种常用类型的Picker:时间选择器,聚合的时间选择器和联动选择器。支持扩展自定义Picker。)

    仿iOS的PickerView控件Android-PickerView.zip

    精仿iOS的PickerView控件,有时间选择和选项选择并支持一二三级联动效果——TimePickerView 时间选择器,支持年月日时分,年月日,年月,时分等格式——OptionsPickerView 选项选择器,支持一,二,三级选项选择,...

    ios-PickerView.zip

    PickerView

    Android-PickerView.zip

    Android-PickerView

    ios-简单快速的集成各种样式的pickerView.zip

    可以简单快速的让点击TextField或者按钮弹出 单列, 多列, 多列关联数据, 城市选择器, 日期选择器, 解决注册,个人信息界面等的选择项的开发简单快速的集成各种样式的pickerView

    ios-pickerView.zip

    在有的项目中使用时间选择器的时候有很多情况下不都是一样的.有的时候需要年月日,有的时候需要年月,有的时候需要年周等等这里我就同意进行了处理

    小程序源码 PickerView.rar

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

    IOS 开发之PickerView自定义视图的实例详解

    IOS 开发之PickerView自定义视图的实例详解 例如选择国家,左边是名称右边是国家,不应该使用两列,而是自定义PickerView的一列,可以通过xib来实现。 注意,虽然PickerView也是一列,但是数据源方法是@required,...

    Android-PickerView-Library-一个高仿 IOS PickerView 控件的库.zip

    预览使用首先需要在 build.gradle 文件中添加依赖:dependencies {  compile 'com.airsaid.library:pickerviewlibrary:1.0.0' }添加好依赖后,重新同步工程。可根据需求使用如下选择器:城市选择: ...

Global site tag (gtag.js) - Google Analytics