`

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

    总的来说,"ios-自定义pickerview.zip"中的DatePickerView示例项目可以帮助开发者学习如何自定义PickerView,尤其是如何构建一个具有特定功能和样式的日期选择器。通过深入研究和实践这个项目,开发者可以提高自己在...

    ios-自定义pickerView.zip

    本资源"ios-自定义pickerView.zip"包含了一个自定义PickerView的实现,实现了数据的实时获取,这在处理动态数据或需要即时更新内容的应用场景中尤其有用。 一、PickerView基础知识 PickerView是苹果iOS SDK中的...

    ios-自定义PickerView.zip

    这个名为“ios-自定义PickerView.zip”的压缩包提供了一个使用UIScrollView实现自定义选择器的示例,可以适应一列到多列的需求。 首先,我们来了解自定义PickerView的核心概念: 1. **UIScrollView**:苹果提供的...

    ios-pickerView.zip

    苹果提供了UIPickerViewDelegate的几个方法,如pickerView:viewForRow:forComponent:reusingView:,允许我们为每一行创建自定义视图。 在实际项目中,我们可能会遇到动态加载数据的情况,例如从服务器获取年份列表...

    安卓Android源码——PickerView.zip

    本资源包含的"PickerView.zip"压缩包很可能是提供了一个自定义的PickerView实现,帮助开发者更好地理解和自定义此类控件。 在Android系统中,PickerView通常由两个核心组件构成:HorizontalScrollView和...

    ios-PickerView.zip

    总之,"ios-PickerView.zip"中的"NFPickerView"是一个关于Picker View学习的好材料,它可以帮助新手理解如何在iOS应用中使用和自定义Picker View,提升用户体验。通过学习和实践,开发者可以更好地掌握Picker View的...

    PickerView.rar

    接下来,为了实现触屏下拉的效果,你需要将PickerView添加到你的视图层级中,通常是布局文件。在Android中,你可以在XML布局文件中声明PickerView,或者在代码中动态添加;在iOS中,你可能需要在StoryBoard或代码中...

    pickerview

    在iOS开发中,PickerView(选择器视图)是一种常用组件,用于展示一系列选项供用户选择,例如日期、时间或一组预设值。标题“pickerview”表明我们将讨论这个组件的使用,而描述中提到的“省市区三级联动”则意味着...

    PopupWindow中显示PickerView

    PopupWindow在Android开发中是一种非常实用的组件,它允许开发者创建弹出式窗口,用于显示额外的信息或提供交互功能,而不会占据整个屏幕。在这个场景中,PopupWindow被用来显示一个PickerView,这是一个多行滚动...

    PickerView.zip

    这个名为"PickerView.zip"的压缩包包含了名为"PickerView-master"的源码项目,我们可以从中学习和理解PickerView的实现原理及其自定义特性。 首先,PickerView的基本使用通常涉及到以下几个步骤: 1. **集成依赖**...

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

    总之,"ios-简单快速的集成各种样式的pickerView.zip" 提供了一个强大的工具,可以帮助iOS开发者轻松创建各种类型的PickerView,节省开发时间和精力,同时提高用户体验。无论是在注册页面、个人信息编辑,还是其他...

    Android-PickerView.zip

    这个"Android-PickerView.zip"文件可能包含了实现这一功能的源代码、示例项目和相关文档,方便开发者集成到自己的应用中。 PickerView主要由两部分构成:WheelView(滚轮视图)和Picker(选择器)。WheelView负责...

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

    描述中提到“仿ios-pickerView.rar,太多无法一一验证是否可用”,这暗示这个压缩包可能包含了一个完整的Android项目,其中包括多个组件或功能。由于文件数量多,作者没有全部测试过,可能存在部分未验证的功能。...

    ios-仿京东多级选择的pickerView.zip

    在“ios-仿京东多级选择的pickerView.zip”这个项目中,开发者MuYanQin创建了一个模仿京东商城多级筛选功能的自定义PickerView控件,名为MCPickerView。这个组件对于实现商品分类、地区筛选等功能非常实用,特别是在...

    pickerview.zip

    为了使用这个模块,开发者需要做的是将“pickerview.zip”解压,导入项目中,然后根据博客提供的指南配置和使用这个时间选择器。这通常包括导入必要的头文件、设置PickerView的代理、初始化模型数据以及处理选择事件...

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

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

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

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

Global site tag (gtag.js) - Google Analytics