Sivakrishna Perla
Sivakrishna Perla

Reputation: 411

when picker view selected keyboard still visible

i have a text field and picker view.when i select the text field picker view is appearing and if i select row in picker still my textfield is editable. i want to set textfield only in drop down list.and one more problem my key board is visible when i select the textfield

   - (void)textFieldDidBeginEditing:(UITextField *)textField {


       [txtstate resignFirstResponder];//this is to hide key board
        txtstate.inputView=pickerView;


    ViewForValuePicker = [[UIView alloc]initWithFrame:CGRectMake(43,337, 212, 160)];
    UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:CGRectMake(43, 0, 212, 30)];
    toolBar.barStyle = UIBarStyleBlackOpaque;
    UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneBtnPressToGetValue)];
    [toolBar setItems:[NSArray arrayWithObject:btn]];

    [ViewForValuePicker addSubview:toolBar];
    pickerView = [[UIPickerView alloc]init] ;
    pickerView.frame=CGRectMake(43, 30, 212, 140);
    pickerView.delegate = self;
    pickerView.dataSource= self;
    pickerView.showsSelectionIndicator = YES;
         [ViewForValuePicker addSubview:pickerView];
    errstate.hidden=YES;
    [testScroll addSubview:ViewForValuePicker];
    [pickerView setHidden:NO];

   }


     - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row
      forComponent:(NSInteger)component reusingView:(UIView *)view {
     UILabel *retval = (id)view;
         if (!retval) {
          retval= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f,
             [pickerView    rowSizeForComponent:component].width,
                     [pickerView rowSizeForComponent:component].height)] ;
   }
   retval.text = [[arr objectAtIndex:row]objectForKey:@"Code"];
    retval.font = [UIFont fontWithName:@"Helvetica-Bold" size:12];


  return retval;
 }


     - (void)doneBtnPressToGetValue{

      [pickerView resignFirstResponder];

    [pickerView removeFromSuperview];
       txtcity.text=nil;
    autocompleteTableView.hidden=YES;
     [ ViewForValuePicker removeFromSuperview];


 }

  -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {

     return 1;
    }

 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
  { 
   txtLId.text=[[arr objectAtIndex:row] valueForKey:@"LId"]; 

    txtstate.text= [[arr objectAtIndex:row] valueForKey:@"Code"];
   //txtstate.userInteractionEnabled=NO;

 } 

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

  - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component; 
 { 

   return [[arr objectAtIndex:row] valueForKey:@"Code"]; 
 }

Upvotes: 0

Views: 223

Answers (3)

Sunil Zalavadiya
Sunil Zalavadiya

Reputation: 1993

Hello try and update following code with your code or check full code at http://pastie.org/6569798 :-

First define

UIActionSheet *actionSheet;

in header file(.h).

- (void)createActionSheet {
    if (actionSheet == nil)
    {
        actionSheet = [[UIActionSheet alloc] initWithTitle:@"Select" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];

        UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        pickerToolbar.barStyle = UIBarStyleBlackOpaque;
        [pickerToolbar sizeToFit];

        NSMutableArray *barItems = [[NSMutableArray alloc] init];

        UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
        [barItems addObject:flexSpace];
        [flexSpace release];

        UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneBtnPressToGetValue)];
        [barItems addObject:doneBtn];
        [doneBtn release];

        [pickerToolbar setItems:barItems animated:YES];
        [barItems release];

        [actionSheet addSubview:pickerToolbar];
        [pickerToolbar release];

        [actionSheet showInView:self.view];
        [actionSheet setBounds:CGRectMake(0,0,320, 464)];
    }
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
     [textField resignFirstResponder];
     return YES;
}

- (void)textFieldDidBeginEditing:(UITextField *)textField
{

    if(textField==txtstate)
    {
        pickerView = [[UIPickerView alloc]init] ;
        pickerView.frame=CGRectMake(0, 44, 320, 420);
        pickerView.delegate = self;
        pickerView.dataSource= self;
        pickerView.showsSelectionIndicator = YES;
        [pickerView setHidden:NO];

        [self createActionSheet];
        [actionSheet addSubview:pickerView];
        [textField resignFirstResponder];
    }
}


- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row
          forComponent:(NSInteger)component reusingView:(UIView *)view
{
    UILabel *retval = (id)view;
    if (!retval) {
        retval= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f,
                                                          [pickerView    rowSizeForComponent:component].width,
                                                          [pickerView rowSizeForComponent:component].height)] ;
    }
    retval.text = [arr objectAtIndex:row];
    retval.font = [UIFont fontWithName:@"Helvetica-Bold" size:12];


    return retval;
}


- (void)doneBtnPressToGetValue
{
    [txtstate resignFirstResponder];

    [actionSheet dismissWithClickedButtonIndex:0 animated:YES];
    [actionSheet release];
    actionSheet = nil;
}

Upvotes: 1

Max
Max

Reputation: 6229

If you want to have just the pickerview show up when you select the text field, take all of the code you have right now in textFieldDidBeginEditing and move it into viewDidLoad. If you initialize txtstate.inputView=pickerView; before hand it will replace the keyboard as the main input.

Upvotes: 0

Mrunal
Mrunal

Reputation: 14118

Assign your textfield.inputview in viewDidLoad itself with pickerView.

In textFieldDidBeginEditing - no more code required.

Also use your UIPickerViewDelegate methods as it is.

Upvotes: 0

Related Questions