how to show pickerview in uitextfield not the keyboard?

后端 未结 5 503
旧时难觅i
旧时难觅i 2021-01-31 23:38

I want to show a UIPickerView on becoming FirstResponder of a UITextfield not the keyboard and fill the value in text field form the picker view.

any one knows this?

相关标签:
5条回答
  • 2021-01-31 23:53

    Edit: this answer was correct at the time of writing. Apple has since introduced inputView. Mafonya answer is what you should be doing nowadays.

    It is possible to prevent the keyboard from popping up. Set your class to be the delegate of the UITextField: textField.delegate = self and add: <UITextFieldDelegate> after your interface declaration (before the {) in the header file.

    Now implement textFieldShouldBeginEditing::

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
        // Show UIPickerView
    
        return NO;
    }
    

    If you want to be able to hide your pickerView this method won't work. What you could do then is create subclass of UITextField and override the *trackingWithTouch:event: selectors and do your magic in those. You probably still need to return NO from textFieldShouldBeginEditting: to prevent the keyboard from showing.

    0 讨论(0)
  • 2021-01-31 23:54

    Check out the code at (there is both textview+tabbar and pickerview+tabbar code)

    UITextView and UIPickerView with its own UIToolbar

    this will get the pickerview to resign etc. All u need to do then is use the pickerview delegate method to update the text view

    - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    

    Instead of using a textfield, use a UIlabel, with a white background. That way the keyboard will not show when you tap it. override the touches event on the UILabel, when that happens call the method form the privious question that will display the new view.

     -(void) addToViewWithAnimation:(UIView *) theView
    
    0 讨论(0)
  • 2021-02-01 00:00

    add inputview to textField.

    picker = [[UIPickerView alloc]init];
    [picker setDataSource:self];
    [picker setDelegate:self];
    [picker setShowsSelectionIndicator:YES];
    
    MyTextField.inputView = picker;
    
    0 讨论(0)
  • 2021-02-01 00:02

    Hey I have pasted in some code I wrote a while back to cover this scenario. There are two examples one with an actionsheet and one without an actionsheet:

    - (void)textFieldDidBeginEditing:(UITextField *)myTextField{
    
                 [myTextField resignFirstResponder];
    
                 actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
    
                 [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
    
                 CGRect pickerFrame = CGRectMake(0, 40, 0, 0);
    
                 UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame];
    
                  pickerView.showsSelectionIndicator = YES;
    
                  pickerView.dataSource = self;
    
                  pickerView.delegate = self;
    
                  [actionSheet addSubview:pickerView];
    
                  [pickerView release]; //NB this may result on the pickerview going black the next time you come back to the textfield, if this is the case just remove this statement
    
                  UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:NSLocalizedString(@"SUBMIT", @"")]];
    
                  closeButton.momentary = YES;
    
                   closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f);
    
                   closeButton.segmentedControlStyle = UISegmentedControlStyleBar;
    
                   closeButton.tintColor = [UIColor blackColor];
    
                   [closeButton addTarget:self action:@selector(dismissActionSheet:) forControlEvents:UIControlEventValueChanged];
    
                   [actionSheet addSubview:closeButton];
    
                   [closeButton release];
    
                   [actionSheet showInView:displayedInView];
    
                   [actionSheet setBounds:CGRectMake(0, 0, 320, 485)];
    
    }
    

    This is the code without the actionsheet:

    - (void)textFieldDidBeginEditing:(UITextField *)myTextField{
    
             [myTextField resignFirstResponder];
    
              for (int component = 0;  component &lt; (((NSInteger)numberOfComponentsForPickerView) - 1); component++) {
    
                  NSInteger valueForRow = [[self.textField.text substringWithRange:NSMakeRange(component,1)] integerValue];
    
                   [pickerView selectRow:valueForRow inComponent:component animated:YES];
    
              }
    
               [self fadeInPickerView];
    
                [view addSubview:pickerView];
    
                [pickerView release];
    
    }
    

    An more detailed example of this can be found at: http://www.buggyprogrammer.co.uk/2010/08/18/open-uipickerview-when-user-enters-textfield/

    0 讨论(0)
  • 2021-02-01 00:05

    Use [textfield setInputView:pickerView];

    Replacing the System Input Views inputView inputAccessoryView

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