0

私は国の配列を含むピッカービューを持っています。私のポイントは、ユーザーが特定の行をタップすると、ユーザーが選択した要素に応じていくつかのコードを書くことですが、どういうわけかうまくいかないので、これを見てください:

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

   if ([countries objectAtIndex:0]){
        NSLog(@"You selected USA");
    } 
}

しかし、問題は、どの行を選択したかに関係なく、NSLog では常に「You selected USA」です。しかし、そのコード行をここに置くと:

  NSLog(@"You selected this: %@", [countries objectAtIndex:row]);

どの国を選択したかがコンソールに表示されます。しかし、ユーザーが特定の行をタップしたときに何かをする必要があり、これを行う方法がわかりません。助けてください。

4

1 に答える 1

0

簡単な答え:使用する必要があります

if ([[countries objectAtIndex:row] isEqualToString:@"USA"]) ...

いい答え:

列挙型を定義し、switch-case 構造を使用します。

// put this in the header before @interface - @end block

enum {
    kCountryUSA     = 0, // pay attention to use the same 
    kCountryCanada  = 1, // order as in countries array
    kCountryFrance  = 2,
    // ...
    };

// in the @implementation:

-(void)pickerView:(UIPickerView *)pickerView
     didSelectRow:(NSInteger)row
      inComponent:(NSInteger)component
{
    switch (row) {
        case kCountryUSA:
            NSLog(@"You selected USA");
            break;

        case kCountryCanada:
            NSLog(@"You selected Canada");
            break;

        case kCountryFrance:
            NSLog(@"You selected France");
            break;

            //...

        default:
            NSLog(@"Unknown selection");
            break;
    }
}
于 2013-02-27T07:52:31.807 に答える