How can I show the UIPickerView when I hit my UITextField?

I found many code examples from the internet but also doesn't work ... Can anyone tell me what's wrong with my coding below? many thanks. SOS

// My repository screen
http://imageupload.org/en/file/209300/03.jpg.html

//This is PickerViewTest.h

@interface InputRound : UIViewController<UITextFieldDelegate>
{
    UIPickerView *pvPickerTest;
    NSMutableArray *aryMaster;
}

@property (nonatomic, retain) IBOutlet UIPickerView *pvPickerTest; 
@property (nonatomic, retain) NSMutableArray *aryMaster;

@end


//This is PickerViewTest.m

@interface InputRound ()

@end

@implementation PickerViewTest

@synthesize pvPickerTest, aryMaster;

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

-(void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    aryMaster = [[NSMutableArray alloc] init];

    [aryMaster addObject:@"User01"];
    [aryMaster addObject:@"User02"];
    [aryMaster addObject:@"User03"];    
}

-(NSInteger)numberOfComponentsInPickerView:(NSInteger)component
{
    return 1;
}

-(NSInteger)pickerView:(UIPickerView *)picker numberOfRowsInComponent:(NSInteger)component
{
    return [aryMaster count];
}

-(NSString *) pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent:(NSInteger)component   
{
    return [aryMaster objectAtIndex:row];
}

-(void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    // Show UIPickerView
    pvPickerTest.frame = CGRectMake(0, 500, pvPickerTest.frame.size.width,     pvPickerTest.frame.size.height);

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:.50];
    [UIView setAnimationDelegate:self];

    pvPickerTest.frame = CGRectMake(0, 200, pvPickerTest.frame.size.width, pvPickerTest.frame.size.height);
    [self.view addSubview:pvPickerTest];
    [UIView commitAnimations];    
    return NO;
}

@end

      

+3


source to share


1 answer


Don't try to reinvent the wheel by showing your own appearance animation to mimic the one built into it. Set the selection view as the input view for the textbox and the system will animate for you:

textField.inputView = pickerView;

      



When you start editing the text box, the picker will animate on screen for you. See my answer here for more information , including adding a toolbar on top with the Finish button.

+18


source







All Articles