如何在 UIActionSheet 中添加 UIPickerView
Posted
技术标签:
【中文标题】如何在 UIActionSheet 中添加 UIPickerView【英文标题】:how to add UIPickerView in UIActionSheet 【发布时间】:2009-12-24 16:27:59 【问题描述】:我有输入 rating(1 - 5) 值的任务,所以我找到了以下日期选择器代码,谁能帮我修改下面的代码,以便添加 UIPickerView 以从 1 到 5 选择速率
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:@"Ratings"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:nil];
UIDatePicker *pickerView = [[UIDatePicker alloc] init];
pickerView.datePickerMode = UIDatePickerModeDate;
[menu addSubview:pickerView];
[menu showInView:self.view];
[menu sendSubviewToBack:pickerView];
[menu setBounds:CGRectMake(0,0,320, 500)];
CGRect pickerRect = pickerView.bounds;
pickerRect.origin.y = -100;
pickerView.bounds = pickerRect;
[pickerView release];
[menu release];
如何做,评分的文本字段将自动输入 UIPIckerView 中的选定值
谢谢
【问题讨论】:
已经有人问过这个问题了。见这里:***.com/questions/1849873/… 【参考方案1】:actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0,40, 320, 216)];
picker.showsSelectionIndicator=YES;
picker.dataSource = self;
picker.delegate = self;
picker.tag=SelectedDropDown;
[actionSheet addSubview:picker];
UIToolbar *tools=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 0,320,40)];
tools.barStyle=UIBarStyleBlackOpaque;
[actionSheet addSubview:tools];
[tools release];
UIBarButtonItem *doneButton=[[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(btnActinDoneClicked)];
doneButton.imageInsets=UIEdgeInsetsMake(200, 6, 50, 25);
UIBarButtonItem *flexSpace= [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
NSArray *array = [[NSArray alloc]initWithObjects:flexSpace,doneButton,nil];
[tools setItems:array];
[doneButton release];
[flexSpace release];
//picker title
UILabel *lblPickerTitle=[[UILabel alloc]initWithFrame:CGRectMake(60,8, 200, 25)];
lblPickerTitle.text=@"";
lblPickerTitle.backgroundColor=[UIColor clearColor];
lblPickerTitle.textColor=[UIColor whiteColor];
lblPickerTitle.textAlignment=NSTextAlignmentCenter;
lblPickerTitle.font=[UIFont boldSystemFontOfSize:15];
[tools addSubview:lblPickerTitle];
[actionSheet showFromRect:CGRectMake(0,480, 320,215) inView:self.view animated:YES];
[actionSheet setBounds:CGRectMake(0,0, 320, 411)];
[actionSheet release];
【讨论】:
【参考方案2】:首先,我认为您可能会将 UIPickerView 与 UIDatePickerView 混淆。日期选择器是一个无法自定义的专用选择器,而 UIPickerView 是专门用于自定义的。 Marc W 在他的评论中是正确的。我answered this question before 认为它提供了比尝试将选择器添加到 UIActionSheet 更好的解决方案。
那里有很多 UIPickerView 教程。
【讨论】:
链接已损坏,并不是真正的答案。如果您在回答之前回答了某些问题,那么它应该被标记为重复而不是这样回答。【参考方案3】:此解决方案适用于横向和 4 英寸屏幕。
UIActionSheet *aac = [[UIActionSheet alloc] initWithTitle:@"Choose Date and Time"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
[datePicker addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];
pickerDateToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
pickerDateToolbar.barStyle = UIBarStyleBlackOpaque;
[pickerDateToolbar sizeToFit];
NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
[barItems addObject:flexSpace];
UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(DatePickerDoneClick)];
[barItems addObject:doneBtn];
[pickerDateToolbar setItems:barItems animated:YES];
[aac addSubview:pickerDateToolbar];
[aac addSubview:datePicker];
[aac showFromTabBar:self.tabBarController.tabBar];
CGFloat wideth = self.view.frame.size.width;
if (UIDeviceOrientationIsLandscape([self interfaceOrientation]))
[aac setBounds:CGRectMake(0,0,wideth, 355)];
[datePicker sizeToFit];
else
[aac setBounds:CGRectMake(0,0, wideth, 470)];
[datePicker sizeToFit];
picker = aac;
【讨论】:
【参考方案4】: //
// ViewController.m
// TestApplication
//
// Created by Macbook on 08/02/14.
// Copyright (c) 2014 Macbook. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize isSelectDate;
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
#pragma mark -OpenActionshhetWithDatePicker Event
-(void)openactionsheetWithDatePicker
actionSheet = [[UIActionSheet alloc] initWithTitle:@"Choose Date" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"",@"",@"",nil];
actionSheet.delegate = self;
[actionSheet setActionSheetStyle:UIActionSheetStyleBlackOpaque];
actionSheet.tag = 3;
[actionSheet showInView:self.view];
UIButton *btncancelpicker = [[UIButton buttonWithType:UIButtonTypeCustom]retain];
[btncancelpicker setFrame:CGRectMake(5, 5, 70,30)];
[btncancelpicker setBackgroundImage:[UIImage imageNamed:@"cancel.png"] forState:UIControlStateNormal];
[btncancelpicker addTarget:self action:@selector(datePickerCancelClicked) forControlEvents:UIControlEventTouchUpInside];
[actionSheet addSubview:btncancelpicker];
UIButton *btndonepicker = [[UIButton buttonWithType:UIButtonTypeCustom]retain];
if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft ||[UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeRight )
[btndonepicker setFrame:CGRectMake(405, 5, 70,30)];
else if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait ||[UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown )
[btndonepicker setFrame:CGRectMake(240, 5, 70,30)];
[btndonepicker setBackgroundImage:[UIImage imageNamed:@"done.png"] forState:UIControlStateNormal];
[btndonepicker addTarget:self action:@selector(datePickerDoneClicked) forControlEvents:UIControlEventTouchUpInside];
[actionSheet addSubview:btndonepicker];
datePicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, 45, 320, 190)];
datePicker.datePickerMode = UIDatePickerModeDate;
datePicker.date = [NSDate date];
[actionSheet addSubview:datePicker];
-(void)datePickerDoneClicked
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
[outputFormatter setDateFormat:@"dd/MM/yyyy"];
NSString *tmp=[outputFormatter stringFromDate:datePicker.date];
if (isSelectDate==TRUE)
[btnfrom setTitle:tmp forState:UIControlStateNormal];
else
[btnTo setTitle:tmp forState:UIControlStateNormal];
[outputFormatter release];
[actionSheet dismissWithClickedButtonIndex:0 animated:YES];
-(void)datePickerCancelClicked
[actionSheet dismissWithClickedButtonIndex:0 animated:YES];
#pragma mark -Button Click Event
-(IBAction)btnfromPress:(id)sender
isSelectDate=TRUE;
[self openactionsheetWithDatePicker];
-(IBAction)btnToPress:(id)sender
isSelectDate =FALSE;
[self openactionsheetWithDatePicker];
-(IBAction)btnRoomPress:(id)sender
[self openRoomPicker];
-(void)openRoomPicker
arrRooms = [[NSMutableArray alloc] init];
[arrRooms addObject:@"1 Room"];
[arrRooms addObject:@"2 Room"];
roomPickerview.hidden=FALSE;
roomPickerview.delegate=self;
roomPickerview.dataSource=self;
[roomPickerview selectRow:0 inComponent:0 animated:NO];
NSString *strRoom= [arrRooms objectAtIndex:[roomPickerview selectedRowInComponent:0]];
[btnRoom setTitle:strRoom forState:UIControlStateNormal];
#pragma mark -PickerView Method
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pv;
return 1;
- (NSInteger)pickerView:(UIPickerView *)pv numberOfRowsInComponent:(NSInteger)component;
return [arrRooms count];
- (void)pickerView:(UIPickerView *)_pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
switch ([roomPickerview selectedRowInComponent:0])
case 0:
NSLog(@"select row is 1");
[btnRoom setTitle:[arrRooms objectAtIndex:row] forState:UIControlStateNormal];
break;
case 1:
NSLog(@"select row is 2");
[btnRoom setTitle:[arrRooms objectAtIndex:row] forState:UIControlStateNormal];
break;
default:
break;
//- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
//
// UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20.0f, 0.0f, 300.0f, 60.0f)]; //x and width are mutually correlated
// label.textAlignment = NSTextAlignmentLeft;
//
// label.text = [arrRooms objectAtIndex:row];
//
// return label;
//
//
- (NSString *)pickerView:(UIPickerView *)pv titleForRow:(NSInteger)row forComponent:(NSInteger)component;
if (arrRooms!=nil)
return [arrRooms objectAtIndex:row];
return @"";
@end
//
// ViewController.h
// TestApplication
//
// Created by Macbook on 08/02/14.
// Copyright (c) 2014 Macbook. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController<UIActionSheetDelegate,UIPickerViewDataSource,UIPickerViewDelegate>
IBOutlet UIButton *btnfrom;
IBOutlet UIButton *btnTo;
UIActionSheet *actionSheet;
UIDatePicker *datePicker;
BOOL isSelectDate;
IBOutlet UIButton *btnRoom;
IBOutlet UIPickerView *roomPickerview;
NSMutableArray *arrRooms;
@property(nonatomic,readwrite) BOOL isSelectDate;
-(IBAction)btnfromPress:(id)sender;
-(IBAction)btnToPress:(id)sender;
-(IBAction)btnRoomPress:(id)sender;
-(void)openactionsheetWithDatePicker;
-(void)openRoomPicker;
@end
【讨论】:
以上是关于如何在 UIActionSheet 中添加 UIPickerView的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UIAlertController 上添加动态按钮?
iOS iPad 如何使用 UIActionSheet 创建 UIPopoverController? [复制]
在 iOS8 的 UIActionSheet 中添加 UIPickerView 的最佳解决方案是啥?
将 UIPickerView 添加到 UIActionSheet(底部的按钮)