1

私のアプリケーションには、8 つのテキストフィールドを含むフォームのようなビューがあります。そのうちの 2 つはピッカーによって入力され、残りは通常の heyboard の入力によって入力されます。ピッカー行が選択されたとき、または戻るボタンが押されたときに、対応するテキストがテキストフィールドに入力される必要があります。

これを適切に実装する方法についてアドバイスをお願いします。また、選択が行われた後/リターンが押された後にピッカー/キーボードが閉じられるようにします。

hereに似たものに対する答えが見つかりました。そして、2 つのピッカー テキスト フィールドを機能させることができましたが、残りのキーボードを表示させることができません。textFieldShouldBeginEditing メソッドをオーバーライドしているためだと思います。それを回避するためのアイデアはありますか?textFieldShouldBeginEditing 内からデフォルトのメソッドを呼び出すことはできますか?? textFieldShouldBeginEditing の最後の行のコメントを外すと、クラッシュすることに注意してください...

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
currentTextField = textField;

if (textField == self.pickerField1) {
    currentArray = self.array1;
    [pickerView reloadAllComponents];
    pickerView.hidden = NO;
    [self animatePickerViewIn];
    return NO;
}
if (textField == self.pickerField2){
    currentArray = self.array2;
    [pickerView reloadAllComponents];
    pickerView.hidden = NO;
    [self animatePickerViewIn];
    return NO;

}
//    else  {
//        [currentTextField becomeFirstResponder];
//        return NO;
//    }
- (void)pickerView:(UIPickerView *)pickerView 
  didSelectRow:(NSInteger)row inComponent: (NSInteger)component
{
[currentTextField setText:[currentArray objectAtIndex:row]];
[currentTextField resignFirstResponder];
pickerView.hidden = YES;
}

ありがとう!

4

1 に答える 1

1

詳細情報が必要な人のためにこれを追加します- user2135738の提供されたコードを使用して動作させる方法は次のとおりです。

MyViewController.h

#import <UIKit/UIKit.h>

@interface MyViewController : UIViewController  <UITextFieldDelegate, UIPickerViewDataSource, UIPickerViewDelegate>

@property (weak, nonatomic) IBOutlet UITextField *aTextField;
@property (weak, nonatomic) IBOutlet UITextField *bTextField;

@end

MyViewController.m

#import "MyViewController.h"

@interface MyViewController ()
@end

@implementation MyViewController {
   NSArray *aArray,
   *bArray,
   *currentArray;

   UITextField *currentTextField;
   UIPickerView *pickerView;
}

- (void)viewDidLoad {
   aArray = [NSArray arrayWithObjects: @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17, @18, @19, @20, nil];
   bArray = [NSArray arrayWithObjects:@"aString", @"bString", nil];

   [super viewDidLoad];

   pickerView = [[UIPickerView alloc] init];
   pickerView.dataSource = self;
   pickerView.delegate = self;
   self.aTextField.delegate = self;
   self.bTextField.delegate = self;

   self.aTextField.inputView = pickerView;
   self.bTextField.inputView = pickerView;
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
   currentTextField = textField;

   if (textField == self.aTextField) {
      currentArray = aArray;
      [pickerView reloadAllComponents];
      pickerView.hidden = NO;
      return YES;
   } else if (textField == self.bTextField){
      currentArray = bArray;
      [pickerView reloadAllComponents];
      pickerView.hidden = NO;
      return YES;
   } else  {
      [currentTextField becomeFirstResponder];
      return NO;
   }

}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
   return 1;
}

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


- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
   return [NSString stringWithFormat:@"%@",[currentArray objectAtIndex:row]];
}

@end
于 2015-11-29T07:12:31.130 に答える