1

ユーザーが特定の UITextfield を選択した場合にのみ表示したい UIPicker があります。私が抱えている問題は次のとおりです。 と呼ばれる作業ピッカーとmyPickerと呼ばれるテキスト フィールドを追加しましたfield

私はこれを尋ねるいくつかの質問を見てきましたが、それらは主にピッカーの代わりにピッカーをポップアップさせることに関するものであり、私にとって正しい答えを見つけたことはありません.

myPickerテキストフィールドを変更することで表示されるようになりましinputViewたが、「完了」ボタンを使用してアクセサリのトゥートバーを追加する方法がわからないという問題があります。

テスト目的で、アクションを含む単純なボタンを追加しました。

self.myPicker.hidden = YES;

[_field resignFirstResponder];

しかし、これは私に奇妙でアニメーション化されていない外観を与えており、気分が良くありません.

これが私のコードです:

#import "ViewController.h"

@interface MixerHPViewController ()
@property (weak, nonatomic) IBOutlet UILabel *testLabel;
@property (weak, nonatomic) IBOutlet UITextField *field;
@property (weak, nonatomic) IBOutlet UIPickerView *myPicker;
@property (weak, nonatomic) IBOutlet UITextField *field2;
- (IBAction)takeButton:(id)sender;



@end

@implementation ViewController

@synthesize tempList;



// returns the number of 'columns' to display.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return [tempList count];
}

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

- (void)pickerView:(UIPickerView *)pickerView
      didSelectRow:(NSInteger)row
       inComponent:(NSInteger)component {

   CGFloat chosenValue;

    switch (row) {
        case 0:
            chosenValue = 0.0000765;
            break;
        case 1:
            chosenValue = 0.0000123;
            break;
        case 2:
            chosenValue = 0.0000982;
            break;
        case 3:
            chosenValue = 0.0000933;
            break;
        case 4:
            chosenValue = 0.0000058;
            break;
        case 5:
            chosenValue = 0.0000121;
            break;
        case 6:
            chosenValue = 0.0000132;
            break;
        default:
            chosenValue = 0;
            break;
    }

NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
    formatter.numberStyle = NSNumberFormatterDecimalStyle;
    formatter.minimumFractionDigits=7;

self.testLabel.text = [formatter stringFromNumber:@(chosenValue)];


}

- (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.
    tempList = [[NSArray alloc] initWithObjects:@"OPTION A",@"OPTION B",@"OPTION C",@"OPTION D",@"OPTION F",@"OPTION G",@"OPTION H", nil];

}

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





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

    if( textField == self.field ) {
        self.field.inputView = _myPicker;

    }
}



- (IBAction)takeButton:(id)sender {
    self.myPicker.hidden = YES;
    [_field resignFirstResponder];
}
@end
4

1 に答える 1

1

アニメーションで閉じることができます:

 - (IBAction)takeButton:(id)sender {
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationDelay:1.0];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

    //you can customize this
    self.myPicker.frame = CGRectMake(-100, -100, 100, 200); 

    [UIView commitAnimations];

    [self.myPicker removeFromSuperview];
    [_field resignFirstResponder];
   }
于 2013-07-11T15:58:36.143 に答える