Iphone 当选取器查看选定键盘时仍可见

Iphone 当选取器查看选定键盘时仍可见,iphone,keyboard,uipickerview,Iphone,Keyboard,Uipickerview,我有一个文本字段和选择器视图。当我选择文本字段时,选择器视图将出现,如果我在选择器中选择行,我的文本字段仍然是可编辑的。我只想在下拉列表中设置textfield。还有一个问题是,当我选择textfield时,我的键盘会显示出来 - (void)textFieldDidBeginEditing:(UITextField *)textField { [txtstate resignFirstResponder];//this is to hide key board

我有一个文本字段和选择器视图。当我选择文本字段时,选择器视图将出现,如果我在选择器中选择行,我的文本字段仍然是可编辑的。我只想在下拉列表中设置textfield。还有一个问题是,当我选择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"]; 
 }

在视图中指定您的
textfield.inputview
,并使用
pickerView
加载自身

文本字段didbeginediting
中-无需更多代码


也可以按原样使用您的
UIPickerViewDeleteGate
方法。

如果您想在选择文本字段时只显示pickerview,请将您现在在
TextFieldDiBeginediting
中拥有的所有代码移到
viewDidLoad
中。如果初始化
txtstate.inputView=pickerView手动输入之前,它将取代键盘作为主要输入。

您好,请尝试用您的代码更新以下代码,或在以下位置检查完整代码:-

首先定义

UIActionSheet *actionSheet;
在头文件(.h)中



为什么只有在开始编辑后才将pickerview分配给input?这很可能是您的问题。实际上,我希望以编程方式查看选择器视图。当我选择文本字段时,它只会出现。这就是我在那里分配的原因。有什么方法分配吗?事实上,我在文本字段中有一个位于右侧的位置,如下拉图像。如果我点击,它只会出现。我应该在视图中创建选择器视图只加载但我的选择器应该出现如果我编辑文本字段,我应该做什么?此时会出现只有您只是告诉编译器,对于这个文本字段,不要使用默认键盘,而是使用datepicker作为输入视图。而在您的例子中,当您选择textfield时,编译器不知道自定义输入视图,所以它首先显示默认键盘。然后显示textfield委托,并显示选择器视图。但这是实现这一目标的错误方法。你明白我的意思了吗。如果我单击图像,那么只有我的pickerview会出现一个问题。即使我从下拉列表中选择了行,它也在编辑,即如果它是“状态”,我可以转换为“状态”,因此它是可编辑的。所以请你回复我的更正。一切都应该通过viewDidLoad和相应的委托方法来完成。k我会尝试,但我的疑问是,在视图完成加载后,如果我选择textfield,则只会显示选择器视图,否则不会。如果不选择textfield,则只会显示选择器视图。去掉[pickerView setHidden:否];否则它将始终出现。它将替换为键盘。但我想在文本字段“+[UIActionSheet addSubview:”:发送到类iam gtting的无法识别的选择器下面显示如下错误this@sivakrishnaperla我通过提供完整代码的链接编辑了答案。检查链接:-可能是一个简单的问题,什么时候行动表将called@sivakrishnaperla:当您调用-(void)createActionSheet方法时,它将创建actionsheet并通过[actionsheet showInView:self.view]将其添加到视图中。以上代码是否有效?@sivakrishnaperla:-如果您从我的答案中找到解决方案,请进行投票并接受答案。
- (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;
}