Objective C使用"完成"按钮实现UIPickerView

use*_*935 7 objective-c uipickerview ios xcode4.3

我正在尝试在UIPickerView中实现"完成"按钮,类似于此链接下的按钮

我查看了课程参考,但我找不到它

谢谢

Pau*_*ter 40

最简单的方法是在Interface Builder中对其进行建模.它是一个UIView包含a UIToolbar和a UIPickerView.

在此输入图像描述

然后为UIView它创建一个插座并连接它.

在此输入图像描述

如果您有,则UITextField可以将自定义视图分配给其inputView属性.

[self.textField setInputView:self.customPicker];
Run Code Online (Sandbox Code Playgroud)

或者,您可以将选择器添加到主视图中......

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.customPicker.frame = CGRectMake(0, CGRectGetMaxY(self.view.frame), CGRectGetWidth(self.customPicker.frame), CGRectGetHeight(self.customPicker.frame));
    [self.view addSubview:self.customPicker];
}
Run Code Online (Sandbox Code Playgroud)

...然后使用此方法显示或隐藏选择器.

- (void)setPickerHidden:(BOOL)hidden
{
    CGAffineTransform transform = hidden ? CGAffineTransformIdentity : CGAffineTransformMakeTranslation(0, -CGRectGetHeight(self.customPicker.frame));

    [UIView animateWithDuration:0.3 animations:^{
        self.customPicker.transform = transform;
    }];
}
Run Code Online (Sandbox Code Playgroud)


Jih*_*ang 6

我添加了一个带有UIBarButtonItem的UIToolbar,用于我的xib中的'done'按钮,框架设置为最初不可见(y值等于父视图的高度).

每次用户访问选择器时,我都会使用动画更改UIDatePicker和UIToolbar的框架(y值),以便它与屏幕底部的选择器一起向上滑动,类似于键盘.

看看下面的代码.

- (IBAction)showPicker
{
    if(pickerVisible == NO)
    {
        // create the picker and add it to the view
        if(self.datePicker == nil) self.datePicker = [[[UIDatePicker alloc] initWithFrame:CGRectMake(0, 460, 320, 216)] autorelease];
        [self.datePicker setMaximumDate:[NSDate date]];
        [self.datePicker setDatePickerMode:UIDatePickerModeDate];
        [self.datePicker setHidden:NO];
        [self.view addSubview:datePicker];

        // the UIToolbar is referenced 'using self.datePickerToolbar'
        [UIView beginAnimations:@"showDatepicker" context:nil];
        // animate for 0.3 secs.
        [UIView setAnimationDuration:0.3];

        CGRect datepickerToolbarFrame = self.datePickerToolbar.frame;
        datepickerToolbarFrame.origin.y -= (self.datePicker.frame.size.height + self.datePickerToolbar.frame.size.height);
        self.datePickerToolbar.frame = datepickerToolbarFrame;

        CGRect datepickerFrame = self.datePicker.frame;
        datepickerFrame.origin.y -= (self.datePicker.frame.size.height + self.datePickerToolbar.frame.size.height);
        self.datePicker.frame = datepickerFrame;

        [UIView commitAnimations];
        pickerVisible = YES;
    }
}

- (IBAction)done
{
    if(pickerVisible == YES)
    {
        [UIView beginAnimations:@"hideDatepicker" context:nil];
        [UIView setAnimationDuration:0.3];

        CGRect datepickerToolbarFrame = self.datePickerToolbar.frame;
        datepickerToolbarFrame.origin.y += (self.datePicker.frame.size.height + self.datePickerToolbar.frame.size.height);
        self.datePickerToolbar.frame = datepickerToolbarFrame;

        CGRect datepickerFrame = self.datePicker.frame;
        datepickerFrame.origin.y += (self.datePicker.frame.size.height + self.datePickerToolbar.frame.size.height);
        self.datePicker.frame = datepickerFrame;
        [UIView commitAnimations];

        // remove the picker after the animation is finished
        [self.datePicker performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:0.3];
    }
}
Run Code Online (Sandbox Code Playgroud)