2014-02-21 1 views
0

В настоящее время я работаю над своим первым «большим» проектом. Проект представляет собой конвертер simpel для разных валют. Интересно, можно ли каким-то образом инвертировать два массива. Я не знаю, как реализовать инструкцию if. Becouse, если я поместил его в заголовок для метода row, я, вероятно, получаю, что элемент управления может достигнуть сообщения о непустой ошибке. Я могу объяснить это довольно плохо, но я только начал программировать.Swap two pickerviews

if(!reverse) { // do nothing } else { 
// swap the two pickerviews 
} 


//Toggle reverse on/off <-> 
- (IBAction)Reverse:(id)sender { 
reverse = (reverse+1)%2; 
NSLog(@"%d",reverse); 
} 

//what title for row 
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 

if (component == 0) { 
    return [Datarray objectAtIndex:row]; 
} 
    return [Datarray2 objectAtIndex:row]; 

} 

ответ

0

Я вижу, что вы пытаетесь сделать. Вместо двух или нескольких PickerView. Просто измените DataSource и перезагрузите PickerView. если у вас есть только две валюты, просто используйте флаг, в противном случае создайте NS_ENUM, чтобы определить, какой массив должен использовать источник данных PickerView, а в методах DataSource, например, pickerView:titleForRow:forComponent:, используйте случай коммутатора if-else statements для определения правильного массива dataSource.

// .h file 
typedef NS_ENUM (NSInteger, CURRENCY_TYPE) { 
    CURRENCY_TYPE_US, 
    CURRENCY_TYPE_DK 
}; 

@property (nonatomic, strong) NSArray *dataArrayUS; // In this example, these arrays contains NSStrings 
@property (nonatomic, strong) NSArray *dataArrayDK; 
@property (nonatomic)   CURRENCY_TYPE currencyType; 

// .m file 
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    switch (self.currencyType) { 
    case CURRENCY_TYPE_US: 
     return self.dataArrayUS[row]; 
     break; 
    case CURRENCY_TYPE_DK: 
     return self.dataArrayDK[row]; 
     break; 
    } 
} 

- (IBAction)currencyChangingAction:(id)sender 
{ 
    // Add some logic that changes to the self.currencyType to the correct currency. 
    self.currencyType = CURRENCY_TYPE_US; // or _DK 
    // And Reload Picker 
} 

EDITED:

Является ли это то, что вы хотите? - Это будет работать, только если у вас есть два массива.

// то, что название для ряда

- (NSString *) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    return (component == 0) ? [Datarray objectAtIndex:row] : [Datarray2 objectAtIndex:row]; 
} 
+0

Finn Larsen: в противном случае создать NS_ENUM, чтобы определить, какой массив PickerView DataSource следует использовать и в методах DataSource, как, pickerView: titleForRow: forComponent: используйте кожух переключателя if-else для определения правильного массива dataSource. Не могли бы вы объяснить больше? – user3338161

+0

Смотрите код, который я добавил. –

+0

Спасибо, не совсем то, что я искал, но я буду использовать его, если мне это нужно – user3338161