1

Xcode4.4のピッカービューで問題が発生しました。1つのピッカーに複数のアレイを配置したいと思います。私はたくさんのチュートリアルを見たり読んだりして、ほとんど仕事に取り掛かることができました。これは私のコードです:

* .h

 #import <UIKit/UIKit.h>

@interface PickerView : UIViewController

<UIPickerViewDataSource,UIPickerViewDelegate>
{
    IBOutlet UIPickerView *picker;

    NSMutableArray *array_1;
    NSMutableArray *array_2;
}

@property (strong, nonatomic) IBOutlet UIView *pickerContainer;
@property (strong, nonatomic) IBOutlet UITextField *textfield_1;
@property (strong, nonatomic) IBOutlet UITextField *textfield_2;

- (IBAction)showArray_1Picker:(id)sender;
- (IBAction)showArray_2Picker:(id)sender;
- (IBAction)hidePicker:(id)sender;

@end

* .m

#import "PickerView.h"

@interface PickerView ()

@end

@implementation PickerView
@synthesize pickerContainer;
@synthesize textfield_1;
@synthesize textfield_2;

int textFieldTouched = 0;

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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent (NSInteger)component
{
    switch(textFieldTouched)
    {
        case 1:
            return [array_1 count];
            break;
        case 2:
            return [array_2 count];
            break;
        default:
            return 0;
    }
}


- (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    switch(textFieldTouched)
    {
        case 1:
            return [array_1 objectAtIndex:row];
            break;
        case 2:
            return [array_2 objectAtIndex:row];
            break;
        default:
            return @"nothing";
    }
}

- (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    switch(textFieldTouched)
    {
        case 1:
            textfield_1.text = [array_1 objectAtIndex:[pickerView selectedRowInComponent:0]];
            break;
        case 2:
            textfield_2.text = [array_2 objectAtIndex:[pickerView selectedRowInComponent:0]];
            break;
    }
}

 - (void)viewDidLoad
 {
    array_1 = [[NSMutableArray alloc] init];
    [array_1 addObject:@"1"];
    [array_1 addObject:@"2"];
    [array_1 addObject:@"3"];
    [array_1 addObject:@"4"];
    [array_1 addObject:@"5"];

    array_2 = [[NSMutableArray alloc] init];
    [array_2 addObject:@"a"];
    [array_2 addObject:@"b"];
    [array_2 addObject:@"c"];
    [array_2 addObject:@"d"];
    [array_2 addObject:@"e"];

    pickerContainer.frame = CGRectMake(0, 460, 320, 261);

    [super viewDidLoad];
}

- (void)viewDidUnload
{
    [self setPickerContainer:nil];
    [self setTextfield_1:nil];
    [self setTextfield_2:nil];
    [super viewDidUnload];
}

- (IBAction)showArray_1Picker:(id)sender
{
    [textfield_1 resignFirstResponder];
    textFieldTouched = 1;
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    pickerContainer.frame = CGRectMake(0, 200, 320, 261);
    [UIView commitAnimations];
}

- (IBAction)showArray_2Picker:(id)sender
{
    [textfield_2 resignFirstResponder];
    textFieldTouched = 2;
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    pickerContainer.frame = CGRectMake(0, 200, 320, 261);
    [UIView commitAnimations];
}

- (IBAction)hidePicker:(id)sender
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    pickerContainer.frame = CGRectMake(0, 460, 320, 261);
    [UIView commitAnimations];
}

@end

だから私は2つの主な問題を抱えています:

  1. ピッカーが表示されたときに空になる前に行ったように、textFieldTouched = 0(または> 2)に設定した場合。とにかく、もう一度非表示にすると、対応する配列の最初の値がテキストフィールドに書き込まれます。

  2. textFieldTouched =1または=2に設定すると、編集しようとしているテキストフィールドに関係なく、ピッカーに関連する配列が入力されます。しかし、ピッカーの値をスクロールして見えないようにすると、後ろにスクロールすると値が変化します。

私はそれをこのようにしたい:

テキストフィールド1をタッチすると、ピッカーに配列1が表示されます

テキストフィールド2をタッチすると、ピッカーに配列2が表示されます

ansなど。

それを手伝ってもらえますか?

コードをアップロードしたので、よく見ることができます。

https://dl.dropbox.com/u/5858884/ProblemCode.zip

PS

英語は私の母国語ではないので、間違いを許してください;)

私は2週間前にプログラミングを始めたので、私の問題に属さない何かが私のコードに間違っているのを見つけたら、私が良くなることができるように教えてください:)

4

1 に答える 1

2

showArray1Picker および showArray2Picker メソッドに次の行を追加します。

[picker reloadAllComponents];

これにより、ピッカーがデータをリロードします。また、IBOutlet ピッカーを IB のピッカー ビューに接続する必要があります。接続されていないことに気付きました。

于 2012-09-07T23:40:29.887 に答える