2016-07-16 11 views
2

UITableViewCellでフォームを作成しています。このフォームには、プロトタイプのセルにlableとtextフィールドがあります。その画像はこちら TableView Story board Image私は動的にフォームを作成するために、識別子を使用しています 、私のコードはUITableViewCellスクロール後にデータが変更される

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("protocell", forIndexPath: indexPath) as! UITableViewCell 

    var lable = cell.viewWithTag(1) as! UILabel 
    lable.text = details[indexPath.row] 
    lable.textColor = UIColor.brownColor().colorWithAlphaComponent(0.7) 

    var textfield = cell.viewWithTag(2) as! UITextField 
    textfield.placeholder = "Enter \(details[indexPath.row])" 
    self.arrayTextField.append(textfield) 
    if details[indexPath.row] == "Name" { 
     textfield.placeholder = "Enter First \(details[indexPath.row]) Middle \(details[indexPath.row]) Last \(details[indexPath.row]) " 
    } 
    textfield.backgroundColor = UIColor.redColor().colorWithAlphaComponent(0.2) 

    return cell 
} 

ある今、問題は、私は、フィールドに値を入力し、残りのフィールドを埋めるためにビューをスクロールするとき、私は、18個のフィールドを持つとしていますですフィールドの値の変更は変更されます。 助けてください。

+0

テキストフィールドにテキストがあるデータソースを追跡する必要があります。したがって、 'tableView:(tableView:cellForRowAtIndexPath:)'に1があればそれを入れます。そうでなければ、セルが再利用されるためplaceHolderを配置します。 – Larme

+0

**テーブルビューのセル( 'arrayTextField')のUI要素を含む配列を使用しないでください**。それはおそらくあなたの問題の理由です。 (データソース)モデルの設計を改善し、モデル内のデータを変更し、テーブルビューをリロードすることを検討してください。 – vadian

+0

は、データソースを追跡する 'arrayTextField' @Larmeを使って、どのテキストフィールドにテキストがあるのか​​を調べるためにデータソースをどのように追跡するのですか?私は検索したが何も見つけなかった。 – knownUnknown

答えて

2

UITableViewCellサブクラスを作成し、prepeareForReuse関数をオーバーライドする - セルをデフォルトモードにする。

スウィフト:あなたのコメントを1として

override func prepareForReuse() { 
    super.prepareForReuse() 

    //set cell to initial state here, reset or set values, etc. 
} 

からUITableViewCellをサブクラス化する方法の:

import UIKit 

class MyCustomCell: UITableViewCell { 
    // things that you can do here: 
    // initialise your properties here. (label, textfield. etc) 
    // layout subviews. 
    // override superclass APIs. 
} 
+0

私はiPhoneアプリ開発の初心者ですので、@Evegeny Karkanはサブクラスの作成方法を教えてくれます。 – knownUnknown

+0

@AdnanMominは私の答えを更新します。 –

0
  1. 配列内の配列は、それを行う必要があります代わりに、データソース「詳細」テキストフィールドを保管しないでください。
  2. テキストフィールドに何かを入力すると、そのindexPathの「詳細」配列が更新されます。
  3. サブクラスのUITableViewCellとCustomTableViewCellを作り、あなたがラベルをテキストフィールドのためIBOutletsを持っており、
  4. あなたの人生を容易にするためのコードがよく
をカプセル化されているので、 updateWithDetails(details)のようなあなたの CustomTablewViewCellのメソッドを持っていないものを
+0

私の詳細**配列は、フィールドのラベルを含んでいるので、私はそれを更新できません。 – knownUnknown

+0

これを配列から削除します。あなたの詳細配列には、EmployeesDetails * employeeDetailsのようなオブジェクトが含まれている必要があります。配列は、次にemployeDetailsArrayでなければなりません。そして、各EmployeeDetailsに対して、テキストフィールドではなくStringとしての "情報"を持たせることができます。あなたのdataSourceは、それらを別々に保つUI要素を含んではいけません。 – hariszaman

+0

私の詳細配列は、 'details = [" name "、" address "、contactnumber"、] 'のようなものです。 – knownUnknown

関連する問題