2016-01-07 43 views
0

我已經採用2個數組來傳遞相應選取器視圖中的數據。我已通過UITextField的Picker Views。我有2個文本字段在特定的文本字段選擇相關的選擇器視圖應該出現。我嘗試了一些方法仍然沒有結果。如何在同一個類中的兩個選取器視圖之間切換

下面的代碼:

//First Picker View 
self.pickerFillStatus = [[UIPickerView alloc]init]; 
self.pickerFillStatus.showsSelectionIndicator = YES; 
self.pickerFillStatus.delegate = self; 
self.pickerFillStatus.dataSource =self; 
self.fillArray = [NSArray arrayWithObjects:@"Single",@"Married Filling Jointly",@"Married Filling Separately",@"Head of House Hold",nil]; 
self.txtFillingStatus.inputView = self.pickerFillStatus; 
self.txtFillingStatus.tag = 1; 

// Second Picker View 
self.pickerState = [[UIPickerView alloc]init]; 
self.pickerState.showsSelectionIndicator = YES; 
self.pickerState.delegate = self; 
self.pickerState.dataSource =self; 
self.stateArray = [NSArray arrayWithObjects:@"SC",@"VT",@"OR",@"PA",@"RI",nil]; 
self.txtState.inputView = self.pickerState; 
self.txtState.tag = 2; 

    // All the Datasource and Delegates  
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
    return 1; 
} 

-(NSInteger)pickerView:(UIPickerView *)pickerView 
    numberOfRowsInComponent:(NSInteger)component 
{ 
    if (self.txtFillingStatus.tag == 1) { 
     return self.fillArray.count; 
    } else if (self.txtState.tag == 2) { 
     return self.stateArray.count; 
    } 
    return 0; 
} 

-(void)pickerView:(UIPickerView *)pickerView didSelectRow: 
    (NSInteger)row inComponent:(NSInteger)component 
{ 
    if (self.txtFillingStatus.tag == 1) { 
     [_txtFillingStatus setText:[self.fillArray objectAtIndex:row]]; 
    }else if (self.txtState.tag == 2) { 
     [_txtState setText:[self.stateArray objectAtIndex:row]]; 
    } 
} 

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow: 
    (NSInteger)row forComponent:(NSInteger)component 
{ 
    if (self.txtFillingStatus.tag == 1) { 
     return [self.fillArray objectAtIndex:row]; 
    }else if (self.txtState.tag == 2) { 
     return [self.stateArray objectAtIndex:row]; 
    } 
    return nil; 
} 
+1

顯示您textFieldDidBeginEditing:方法 – Smile

+0

我不力添加方法@ismail – iDeveloper

+0

- (空)textFieldDidBeginEditing:(*的UITextField)文本框添加此方法。並在此方法中,您可以使用工作@ismail – Smile

回答

0

首先是沒有必要創建2個選擇器視圖。您的功能只能通過一個選擇器視圖本身來實現。你需要做的是

1.創建一個選擇器視圖。例如

- (void) createPickerView { 
    pickerView = [[UIPickerView alloc] init]; 
    [pickerView setDelegate:self]; 
    [pickerView setDataSource:self]; 
    pickerView.showsSelectionIndicator = YES; 
    [pickerView selectRow:2 inComponent:0 animated:YES]; 
} 

2.在textFieldDidBeginEditing方法重新加載基於在下面的代碼以供參考文本字段selected.Look的pickerView組件。這裏「currentTextfieldForPicker」是一個NSString * currentTextfieldForPicker; 。 「TXTFILLING_STATUS」和「TXT_STATE」是兩個字符串,用於標識單擊哪個文本字段。

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

      if (textField == txtFillingStatus) { 
    currentTextfieldForPicker = TXTFILLING_STATUS; 

    [pickerView reloadAllComponents]; 

    } 

    else if (textField == txtState) { 

    currentTextfieldForPicker = TXT_STATE; 

    [pickerView reloadAllComponents]; 

    } 

    } 

3.  Now implement picker view delegates as follows: 
    // Total rows in our component 

-(NSInteger)pickerView:(UIPickerView*)pickerViewnumberOfRowsInComponent:(NSInteger)component { 
    if ([currentTextfieldForPicker isEqualToString:TXTFILLING_STATUS]) { 
     return [fillArray count]; 
    }else if ([currentTextfieldForPicker isEqualToString:TXT_STATE]) { 
     return [stateArray count]; 
    } 
    else { 
     // Some default array if you want to 
     return [inputDataArray count]; 
    } 
} 
    // Display each row's data. 
    -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ 
     if ([currentTextfieldForPicker isEqualToString:TXTFILLING_STATUS]) { 
      return [fillArray objectAtIndex:row] ; 
     } else if ([currentTextfieldForPicker isEqualToString:TXT_STATE]) { 
      return [stateArray objectAtIndex:row]; 
     } 
     return [inputDataArray objectAtIndex:row] ; 
    } 
1

你的,如果這樣做參考你self.txtFillingStatus.tag。 嘗試一下對引用類的引用。

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ 

    if ([pickerView isEqual:self.pickerFillStatus]) { 

    return self.fillArray.count; 

    } else if (([pickerView isEqual:self.pickerState]) { 
    return self.stateArray.count; 
    } 

return 0; 
} 
+1

是的標籤 – iDeveloper

相關問題