交换两个pickerviews

时间:2014-02-21 17:10:36

标签: ios objective-c uipickerview

我目前正在开展我的第一个“大”项目。该项目是针对不同货币的简化转换器。我想知道是否有可能以某种方式反转两个数组。我不知道如何实现if语句。如果我把它放在行方法的标题中我可能会得到控件可能会达到非无效的错误信息。我可能会解释这个很糟糕,但我刚开始编程。

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];

}

1 个答案:

答案 0 :(得分:0)

我明白你要做什么。而不是有两个或多个PickerViews。只需更改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
}

已编辑:

这是你想要的吗? - 这只有在你有两个数组时才有效。

//行的标题

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