【问题标题】:How to add done button on uidatepicker?如何在 uidatepicker 上添加完成按钮?
【发布时间】:2014-09-19 12:52:22
【问题描述】:
UIDatePicker *datePicker = [[UIDatePicker alloc]init];
[datePicker setDate:[NSDate date]];
[datePicker addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged];
[txt_time setInputView:datePicker];

UIBarButtonItem *barButton=[[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(addORDeleteRows)];

当我按下文本字段时如何在 uidatepicker 顶部添加完成按钮,然后 uidatepicker 将在输入日期完成按钮后显示。单击完成按钮后,uidatepicker 应该被隐藏。

【问题讨论】:

  • 在 StackOverflow 上有关如何将完成按钮添加到日期选择器的所有答案中,这个:stackoverflow.com/questions/12096118/… 是最有帮助的。它以最少的代码和自定义配置完全达到了预期的结果。

标签: ios uidatepicker


【解决方案1】:

Alloc 视图将底部的日期选择器添加到视图中,并将日期选择器顶部的工具栏添加到视图中。 将 barbuttons 添加到工具栏。

【讨论】:

    【解决方案2】:

    //先声明所有属性,然后在.h中设置delegate和datasource这样的

    @interface RegistrationView : UIViewController <UIPickerViewDataSource,UIPickerViewDelegate,UIActionSheetDelegate>
    {
        UIPickerView *picker;
        UIToolbar *toolbarPicker;
        UIActionSheet *actionPicker;
    }
    @property (strong,nonatomic)  UIPickerView *picker;
    @property (strong,nonatomic)  UIToolbar *toolbarPicker;
    @property (strong,nonatomic)  UIActionSheet *actionPicker;   
    

    //和.m文件中的合成

    @synthesize picker,actionPicker,toolbarPicker;
    

    //在View中确实加载方法put调用了picker的设置方法

     [self pickerSetting];
    

    //通过这个方法设置picker、action sheet和toolbar

     -(void) pickerSetting 
    {
    
        toolbarPicker = [[UIToolbar alloc] initWithFrame:CGRectMake(0,0,self.view.bounds.size.width,44)];
        if (!g_IS_IOS_6)
        {
          toolbarPicker.barTintColor = [UIColor colorWithRed:72.0/255.0 green:197.0/255.0 blue:87.0/255.0 alpha:1.0];
        }
        toolbarPicker.frame=CGRectMake(0,0,320,44);
        actionPicker = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil  destructiveButtonTitle:nil otherButtonTitles:nil];
        actionPicker.frame = CGRectMake(0, 234, 320, 256);
        [actionPicker setActionSheetStyle:UIActionSheetStyleDefault];
        actionPicker.delegate = self;
    
        UIImage *imgbtnConvert = [UIImage imageNamed:@"info_button.png"];//Done btn.png
        UIButton *btnConvert = [UIButton buttonWithType:UIButtonTypeCustom];
        btnConvert.bounds = CGRectMake(200, 0, 93,31);
        [btnConvert setTitle:@"Done" forState:UIControlStateNormal];
        [btnConvert setTintColor:[UIColor whiteColor]];
        [btnConvert setBackgroundImage:imgbtnConvert forState:UIControlStateNormal];
        [btnConvert addTarget:self action:@selector(pickerDoneClick) forControlEvents:UIControlEventTouchUpInside];
        UIBarButtonItem *barButtonItemConvert = [[UIBarButtonItem alloc] initWithCustomView:btnConvert];
    
        UIBarButtonItem *flexConvert = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    
        UIImage *imageConvert = [UIImage imageNamed:@"info_button.png"];//cancel png
        UIButton *buttonConvert = [UIButton buttonWithType:UIButtonTypeCustom];
        buttonConvert.bounds = CGRectMake( 0, 0, 93,31);
        [buttonConvert setTitle:@"Cancel" forState:UIControlStateNormal];  //set title
        [buttonConvert setTintColor:[UIColor whiteColor]]; //font color
        [buttonConvert setBackgroundImage:imageConvert forState:UIControlStateNormal]; //set background image
        [buttonConvert addTarget:self action:@selector(pickerCancelClick) forControlEvents:UIControlEventTouchUpInside];
        UIBarButtonItem *barCancelButtonItemConvert = [[UIBarButtonItem alloc] initWithCustomView:buttonConvert];
    
        NSArray *itemsConvert = [[NSArray alloc] initWithObjects:barCancelButtonItemConvert, flexConvert, barButtonItemConvert, nil];
        [toolbarPicker setItems:itemsConvert];
        [actionPicker addSubview:toolbarPicker];
    
        picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 44, 320, 216)];
        picker.delegate = self;
        picker.dataSource = self;
        picker.showsSelectionIndicator = YES;
        picker.backgroundColor= [UIColor whiteColor];
        [actionPicker addSubview:picker];
    }
    

    // 并为选择器完成按钮和取消按钮单击添加两个方法。

    -(void) pickerDoneClick
    {
        // picker done button click put here your code ..
        [actionPickerSearchCar dismissWithClickedButtonIndex:0 animated:YES];
    
    }
    
    -(void) pickerCancelClick {
        // Cancel button click 
        [actionPickerSearchCar dismissWithClickedButtonIndex:0 animated:YES];
    
    }
    

    //并把委托和数据源方法放在一起

    #pragma mark -
    #pragma mark UIPickerView Delegate Datasource Method
    
    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
        return 1;
    }
    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    
       // return yourarr.count;
    }
    
    - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
    {
    
       // return yourarr[row];
    }
    
    
    - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    {
       // selectedfiles =yourarr[row];
    }
    

    // 为分配选择器调用此方法。

    [self pickerSetting] 
    

    // 并使用 this 显示选择器(将 This 放入按钮操作方法中)

    -(IBAction)showPicker:(id)sender
    {
        [actionPickerSearchCar showInView:self.view];
        [actionPickerSearchCar setBounds:CGRectMake(0, 0, 320, 465)];
    }
    

    希望对你有帮助。谢谢。

    【讨论】:

    • 如何调用这些方法
    • 当我点击 uitextfield 时会显示 uidatepicker。但我想在 uidatepicker 顶部显示完成按钮,因为在输入日期后 uidatepicker 最小化。
    • @user2103135 请实现此代码与您的要求相同,完成按钮显示选择器顶部:)
    【解决方案3】:

    我认为您可能真的想使用UITextFieldinputAccessoryView 属性。只需将UIToolbar 与您的UIBarButtonItem 放在一起,然后使用目标操作调用[txt_time resignFirstResponder]

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 2012-04-22
      • 2015-01-18
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多