如何在UIActionSheet中添加UIPickerView

时间:2009-12-24 16:28:00

标签: iphone uipickerview uiactionsheet

我有任务输入评级(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

中的选定值自动输入评级的文本字段

感谢

4 个答案:

答案 0 :(得分:13)

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];

答案 1 :(得分:3)

首先,我认为您可能会将UIPickerView与UIDatePickerView混淆。日期选择器是一个专门的选择器,当UIPickerView专门用于自定义时,无法自定义。 Marc W的评论是正确的。我answered this question before并认为它提供了比尝试将选择器添加到UIActionSheet更好的解决方案。

有很多UIPickerView教程。

答案 2 :(得分:0)

此解决方案适用于横向和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;

答案 3 :(得分:-1)

    //
    //  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