我的视图中有两个文本字段。我正在使用选择器视图作为输入。当启用了选择器时,键盘在选择器的后面是可见的。另一个问题是当我在``操作''中的文本字段中使用``辞职第一响应者''时,它第一次显示没有键盘在后面的选择器,但是第二次当我单击文本字段出现,而不是选择器。这是我的代码。

- (IBAction)selectService:(id)sender
  {

  [self createActionSheet];

 //[selectServiceTextBox resignFirstResponder];

  pickerType = @"servicePickerType";

  servicePicker =  [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 44.0, 0.0, 0.0)];

  pickerArray = [[NSArray alloc]initWithObjects:@"Money Transfer",@"Bill Payment", nil];

  servicePicker.dataSource = self;

  servicePicker.delegate = self;

  servicePicker.showsSelectionIndicator = YES;

  [actionSheet addSubview:servicePicker];

  // rowIndex = [stateTextField.text intValue];

  //[servicePicker selectRow:rowIndex inComponent:0 animated:NO];


 }

 - (IBAction)wayOfTransfer:(id)sender
  {
     if ([selectedItem isEqualToString:@""])
    {

        NSLog(@"empty selection");
    }
    else if ([selectServiceTextBox.text isEqualToString:@"Money Transfer"])
    {

        [self createActionSheet];

        // [secondTextBox resignFirstResponder];

        //[selectServiceTextBox resignFirstResponder];

         pickerType = @"MoneyTransferMethod";

         servicePicker =  [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 44.0, 0.0, 0.0)];

         pickerArrayTwo = [[NSArray alloc]initWithObjects:@"Cash Pick-up",@"Bank Account",@"Zym Card", nil];

         servicePicker.dataSource = self;

         servicePicker.delegate = self;

         servicePicker.showsSelectionIndicator = YES;

         [actionSheet addSubview:servicePicker];

    }
 }

最佳答案

您必须使选择器和键盘彼此互斥,以便可以在彼此之间正常切换。一种方法是默认情况下隐藏选择器,然后在第一个textview成为焦点时将其显示在屏幕上使用动画...类似地将其隐藏,同时使用第二个textview打开键盘。

我已经制作了一个样例项目,并对此进行了测试...希望这是您打算做的...

//ViewController.h
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITextViewDelegate,UIPickerViewDataSource,UIPickerViewDelegate>

@property (weak, nonatomic) IBOutlet UITextView *firstTextView;
@property (weak, nonatomic) IBOutlet UITextView *secondTextView;
@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
@end
//ViewController.m
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController{
    NSMutableArray *pickerDataSource;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    pickerDataSource = [[NSMutableArray alloc] initWithObjects:@"data1",@"data2", nil];

    self.pickerView.frame   =   CGRectMake(0, self.view.frame.size.height, 320, 162);

    self.pickerView.delegate    =   self;
    self.pickerView.dataSource  =   self;

}

// Textview delegates
-(void)textViewDidBeginEditing:(UITextView *)textView{
    if ([textView isEqual:self.firstTextView]) {
        [textView resignFirstResponder];

        if (self.pickerView.frame.origin.y >= self.view.frame.size.height) {
            [self showPicker];
        }else{
            [self hidePicker];
        }
    }else{
        [self hidePicker];
        [self.secondTextView becomeFirstResponder];


    }
}

-(void)showPicker{
    [UIView animateWithDuration:0.2 animations:^{
        self.pickerView.frame   =   CGRectMake(self.pickerView.frame.origin.x, self.pickerView.frame.origin.y - self.pickerView.frame.size.height, self.pickerView.frame.size.width, self.pickerView.frame.size.height);
    }];

}

-(void)hidePicker{
    [UIView animateWithDuration:0.2 animations:^{
        self.pickerView.frame   =   CGRectMake(self.pickerView.frame.origin.x, self.pickerView.frame.origin.y + self.pickerView.frame.size.height, self.pickerView.frame.size.width, self.pickerView.frame.size.height);
    }];
}

// Picker Delegates

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return pickerDataSource.count;
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    self.firstTextView.text =   pickerDataSource[row];
}
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    return [pickerDataSource objectAtIndex:row];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

请让我知道是否有任何不清楚的地方。

关于ios - Picker View 后面的UIKeyboard,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22659367/

10-09 16:14
查看更多