Elegantly replace iPhone keyboard with UIPickerView

前端 未结 2 1209
我寻月下人不归
我寻月下人不归 2020-12-12 17:42

I have a table view that has embedded UITextFields for entering some data. It also has two other fields that popup a UIPickerView and a UIDatePicker - as demonstrated in th

相关标签:
2条回答
  • 2020-12-12 18:19

    First, here is a screencapture showing how this looks.

    Implement UITextFieldDelegate and display a "popup" containing a UIPickerView.

    - (void)textFieldDidEndEditing:(UITextField *)textField {
    
        UIPickerView *picker = [[UIPickerView alloc] 
                                     initWithFrame:CGRectMake(0, 244, 320, 270)];
        picker.delegate = self;
        picker.dataSource = self;
        [self.view addSubview:picker];
        [picker release];
    }
    

    When the keyboard disappears, a picker view is then visible.

    If you want to take this a bit further, you can animate the UIPickerView "slide in" like the keyboard.

    - (void)viewDidLoad {
    
        //picker exists in the view, but is outside visible range
        picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 480, 320, 270)];
        picker.delegate = self;
        picker.dataSource = self;
        [self.view addSubview:picker];
        [picker release];
    }
    
    //animate the picker into view
    - (void)textFieldDidEndEditing:(UITextField *)textField {
    
        [UIView beginAnimations:@"picker" context:nil];
        [UIView setAnimationDuration:0.5];
    
        picker.transform = CGAffineTransformMakeTranslation(0,-236);
        [UIView commitAnimations];
    
    }
    
    //animate the picker out of view
    - (void)textFieldDidBeginEditing:(UITextField *)textField {
    
        [UIView beginAnimations:@"picker" context:nil];
        [UIView setAnimationDuration:0.5];
    
        picker.transform = CGAffineTransformMakeTranslation(0,236);
        [UIView commitAnimations];
    }
    
    //just hide the keyboard in this example
    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
        [textField resignFirstResponder];
        return NO;
    }
    
    0 讨论(0)
  • 2020-12-12 18:24

    Just set the UITextField's inputView property to a UIPickerView.

    0 讨论(0)
提交回复
热议问题