2016-12-22 7 views
0

こんにちは! UITableViewに問題があります。私はを私のtextFieldの行のいくつかの行に以下のコードとして追加します。実際にはpickerViewはindexPath.rowのセルに追加されますが、各セクションには追加されません。それで、今朝は私を立ち往生させてください。申し訳ありませんが、私の英語は良くありません。特別なあなたのソリューションに感謝します。テーブルビュー内の各セルのデータ繰り返し

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let data = (self.tableItems[indexPath.section].value?[indexPath.row])! 
    let identifier : String = data["CELL_IDENTIFIER"]!! 
    let cell = tableView.dequeueReusableCell(withIdentifier: identifier) 
    if cell is QuotationHeaderInSectionCell{ 
     let headerCell = cell as! QuotationHeaderInSectionCell 
     headerCell.lblHeaderInSectionTitle.text = data["TEXT_LABEL"]!! 
    }else if cell is QuotationItemCell{ 
     let itemCell = cell as! QuotationItemCell 
     itemCell.lblCellTitle.text = data["TEXT_LABEL"]!! 
     switch indexPath.section { 
     case 0: 
      switch indexPath.row { 
      case 1: 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: titlePickerView) 
       break 
      case 4: 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: genderPickerView) 
       break 
      case 10: 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: provincePickerView) 
       break 
      case 11: 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: districtPickerView) 
       break 
      case 12: 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: communePickerView) 
       break 
      case 13: 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: villagePickerView) 
       break 
      default: 
       break 
      } 
      break 
     case 1: 
      switch indexPath.row { 
      case 0: 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: assetMakePickerView) 
       break 
      case 1: 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: assetRangePickerView) 
       break 
      case 2: 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: assetModelPickerView) 
       break 
      case 3: 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: assetColorPickerView) 
       break 
      default: 
       break 
      } 
     case 2: 
      if indexPath.row == 0 { 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: dealerPickerView) 
      } 
      break 
     case 3: 
      switch indexPath.row { 
      case 0: 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: financeProductPickerView) 
       break 
      case 1: 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: advPaymentPercentPickerView) 
       break 
      case 3: 
       self.initInputViewForTextField(sender: itemCell.textFieldCell, inputView: assetColorPickerView) 
       break 
      default: 
       break 
      } 
      break 
     default: 
      break 
     } 

    }else if cell is QuotationCommentCell{ 
     let commentCell = cell as! QuotationCommentCell 
     commentCell.textViewComment.text = data["TEXT_LABEL"]!! 
    }else if cell is DocumentTableViewCell{ 
     let documentCell = cell as! DocumentTableViewCell 
    } 
    return cell! 
} 
+0

として良いかもしれませんその中に。次に、ピッカーを持っていると思われるセルにのみオプションでそれを表示します。ピッカーの値に関しては、代わりにこのビューコントローラまたはグローバルconstのいずれかの定数として配列内にそれぞれセットすることができます。そうすれば、表示されるすべてのセルのビューを追加したり削除したりする必要はありません。 –

+0

どのような型の配列が定数ですか?もっと詳しくplz – Socheat

答えて

0

私も正式な答えを与えるかもしれない考え直し後:

は、ここに私のコードです。

ストーリーボードまたはセルサブクラスのinit関数を使用して、textFieldをプロトタイプに追加できます。

次に、ビューコントローラにindexPathプロパティを設定して、表示されるときにどのピッカーが表示されるかを知ることができます。通常、currentIndexPathという名前を付けて、セルに渡します。

そのピッカーのtextFieldを所有するセルにデリゲートを設定します。さらに、セルサブクラスに配列を作成して、ピッカーのデータを保持します。あなたのコードは、単にセルの配列から読み取ることができますtitleForRow UIPickerDelegate方法で

if cell is QuotationItemCell { 
    let itemCell = cell as! QuotationItemCell 
    switch indexPath.section { 
    case 0: 
     switch indexPath.row { 
     case 1,4,10,11,12,13: 
      itemCell.textField.alpha = 1 
      currentIndexPath = indexPath 
      itemCell.currentIndexPath = indexPath //Property of the cell subclass 
      itemCell.dataArray = dataDict[indexPath.row] 
      itemCell.pickerView.reloadAllComponent //If the pickerView cannot be accessed here create a method in the cell subclass to reload it. 
     default: 
      itemCell.textField.alpha = 0 
     } 
    } 
} 

ようになりますcellForRowAt中に

あなたが求めている配列は、実際のtableViewがセルを再利用するので、あなたはセルの一部として、ストーリーボードプロトタイプによってまたは細胞サブクラスによってピッカービューを持つ検討する必要があります辞書

class yourViewController, UIViewController { 
    let dataDict = [4:["Male","Female"], 
        10:["Something","Else"]] //Make sure the key correspond to the row the data is in 
    var currentIndexPath:IndexPath = IndexPath() //This is suppose to be here too 

} 
+0

pickerViewはQUOTATIONItemCellにありません – Socheat

+0

私はテキストフィールドにフォーカスを当てるとpickerViewをロードします – Socheat

+0

私は瞬間を与えて、私はその使用のために調整しようとします –

関連する問題