2017-03-07 15 views
0

静的なtableViewを作成し、各tableViewCell(すべてのセルが異なるカスタムtableViewCellである)からCoreDataにデータを保存します。ボタンを押すたびにすべてのTableViewCellを反復処理するにはどうすればよいですか?私はストーリーボードを使用していないので、私はIBOutletsを持っていません。Swift:ボタンプレスですべてのtableViewRowsを反復する方法

EDIT:申し訳ありませんが、私は私の問題を特定する必要があります。以下のコードを参照してください。 私は3つのCustomCellを持っています。 FirstCustomCellにはTextfield、SecondCustomCellにはUIPickerView、ThirdCustomCellにはUIDatePickerが含まれています。コントローラには、saveButton()も含まれています。私がボタンを押すと、私はTextField、UIPickerViewとUIDatePickerからの入力を取得したいと思います。

私は私のTableViewController中)(saveButton上のTextField、UIPickerViewとUIDatePickerからの入力にアクセスするにはどうすればよい
//TableViewController 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
switch indexPath.row { 
    case 0: 
     return tableView.dequeueReusableCell(withIdentifier: cellId1) as! FirstCustomCell //includes a UITextField 
    case 1: 
     return tableView.dequeueReusableCell(withIdentifier: cellId2) as! SecondCustomCell //includes a UIPickerView 
    case 2: 
     return tableView.dequeueReusableCell(withIdentifier: cellId3) as! ThirdCustomCell //includes a UIDatePicker 
    default: 
     return UITableViewCell(style: .default, reuseIdentifier: nil) 
    } 
}  

+0

これらのセルテンプレートはどのように定義されていますか? XIBファイルでは? –

+0

UITableViewCellをサブクラス化するクラス – eberhapa

+0

でも、セルのカスタムフィールドはどのように定義されていますか? –

答えて

1

短い答え:すべてのテーブルビュー行を反復処理しないでください。理由は次のとおりです。

  • これは静的なテーブルビューです。これは、(ストーリーボードを使用していないため)すべてのテーブルビューセルをプログラムで作成したことを意味します。これは、そこにいくつの細胞があるかを正確に知ることを意味します。
  • あなたは何をすべき

:あなたはSTATICテーブルビューを持っている時はいつでも

  • は、プロパティを宣言します。
  • 各テーブルビューセルに必要なデータを保持するUITextField/UILabel/UISwitch/UIButton ...がある場合は、UITextField/UILabel/UISwitch/UIButton ...プロパティを宣言し、そのデータにアクセスしてコアデータに保存します。
+0

私の更新された質問を見てください。私は今試したこと、私は動作しますが、正しいことはFirstCustomCellを格納するプロパティを作成し、セルをデキューする代わりにcellforrowatのセルとしてこのプロパティを返すかどうかわかりません。このアプローチは正しいですか? – eberhapa

+0

これは絶対にうまくいきます。このチュートリアルをご覧くださいhttp://derpturkey.com/create-a-static-uitableview-without-storyboards/ –

3

セルにデータを格納しないでください。セルからデータを保持し、データをセルにインストールするモデルオブジェクトが必要です。ユーザーがそのデータを編集する場合は、編集内容を収集してモデルに適用する必要があります。

次に、モデルをきれいに簡単にコアデータに保存できます。

現在、静的なテーブルビューを使用しているため、使用しているアプローチを取り除くことができるかもしれませんが、それは良い方法だとは言えません。

通常の表ビューの場合、画面に収まるよりも多くのセルがあり、表ビューはセルをリサイクルし、ユーザーがスクロールするときに再利用します。セルが画面からスクロールすると、そのフィールドの設定は破棄されます。

+0

私はモデルがあり、セルにデータをインストールします。私は、テキストフィールドの入力からデータを収集し、それらをモデルに戻す方法に問題があります。編集した質問に私のアクチュアールコードを掲載しました(コードを短縮するために、モデルからデータをインストールすることはありません)。 – eberhapa

関連する問題