2017-01-18 3 views
0

シングルピッカーObjective-Cを使用して、国/州/都市の値をどのように管理しますか?シングルピッカーで国/都道府県を管理するにはどうすればいいですか?

私が試してみると、インデックスが変更されるとクラッシュします。それは都市の都市と州を扱うが、都市とは問題がある。どのライブラリがうまくいくのでしょうか?

は、私はあなたがObjective-Cのコードを求めている知っている

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ 
    self.txtOfficeLocation.text = self.provinceArray[row]; 
    for (int i = 0; i < self.provinceKeyValueDic.count; i++) { 
     if ([self.provinceKeyValueDic.allKeys[i] isEqualToString:self.provinceArray[row]]){ 
       provinceID = [[self.provinceKeyValueDic.allValues[i]valueForKey:@"id"]in‌​tegerValue]; NSLog(@"province key :%d", provinceID); 
     } 
    } 
} 
+1

試したことがあれば、コードを表示してください。 – iphonic

+0

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)コンポーネント{ self.txtOfficeLocation.text = self.provinceArray [row]; がため(INT i = 0; iが

答えて

0

以下の私のコードを参照してくださいが、ここでは迅速な例です - 重要な要素は、変換するのは簡単です。

私はあなたがあなたのデータを設定しているかわからないが、私はあなたがそれをあなたが

var stateData = CountryData(country: "UK", state: [StateData(state: "Midlothian", city: ["Edinburgh", "Bathgate", "Livingston"])]) 
    stateData.state.append(StateData(state: "Strathclyde", city: ["Glasgow", "Prestwick", "Lanark"])) 
    pickerData.append(stateData) 

    stateData = CountryData(country: "USA", state: [StateData(state: "Alabama", city: ["Montgomery", "Birmingham"])]) 
    stateData.state.append(StateData(state: "Alaska", city: ["Juneau", "Anchorage"])) 
    stateData.state.append(StateData(state: "Arizona", city: ["Phoenix", "Another city", "City 3"])) 
    pickerData.append(stateData) 

を好きなように移入することができ、このようないくつかの

struct StateData 
{ 
    var state : String 
    var city : [String] = [] 
} 

struct CountryData 
{ 
    var country : String 
    var state : [StateData] = [] 
} 

var pickerData : [CountryData] = [] 

を作成し、私は重要なことだと思います選択した内容を把握することです

var countrySelected : Int = 0 
var stateSelected : Int  = 0 
var citySelected : Int  = 0 

pickerViewのメソッドは次のようになります

func numberOfComponents(in pickerView: UIPickerView) -> Int 
{ 
    return 3 // country, state, city 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
{ 
    switch component 
    { 
    case 0: // country 
     return pickerData.count 

    case 1: // state 
     return pickerData[countrySelected].state.count 

    case 2: // city 
     return pickerData[countrySelected].state[stateSelected].city.count 

    default: 
     return 0 
    } 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
{ 
    switch component 
    { 
    case 0: // country 
     return pickerData[row].country 

    case 1: // state 
     return pickerData[countrySelected].state[row].state 

    case 2: // city 
     return pickerData[countrySelected].state[stateSelected].city[row] 

    default: 
     return "" 
    } 
} 

興味深いビットはあなたの新しいに存在しない値を指す状態や都市指数で終わるしないこと、あなたが国を変更、またはときの状態を変更することを確認することです表示 - あなたが1つの州の3番目の都市を選択してから2つの都市だけの州に移動したときのように。それはあなたが見ている範囲外のエラーを生成します。このように修正することができます

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
{ 

    switch component { 
    case 0: // country 
     countrySelected = pickerView.selectedRow(inComponent: 0) 
     stateSelected = 0 
     citySelected = 0 

     pickerView.reloadComponent(1) 
     pickerView.selectRow(0, inComponent: 1, animated: true) 
     pickerView.reloadComponent(2) 
     pickerView.selectRow(0, inComponent: 2, animated: true) 

    case 1: // country 
     stateSelected = pickerView.selectedRow(inComponent: 1) 
     citySelected = 0 

     pickerView.reloadComponent(2) 
     pickerView.selectRow(0, inComponent: 2, animated: true) 

    case 2: // country 
     citySelected = pickerView.selectedRow(inComponent: 2) 

    default: 
     break 
    } 

    print("\(pickerData[countrySelected].country), \(pickerData[countrySelected].state[stateSelected].state), \(pickerData[countrySelected].state[stateSelected].city[citySelected])") 
} 
関連する問題