2017-08-15 5 views
-1

UITableviewCellを使用してアプリケーションプロジェクトでプロファイルフォームを作成しています。だから私は単一の細胞を使用しています。カスタムセルはUITextFieldで構成されています。最初に、これらのフィールドにはWebサービスが設定されます。以下に示すようにスクロールアップとスクロールダウン中にカスタムテーブルビューのセルのUITextFieldの値が変更される

Initial form details

今、私は完全な名前を編集することができます。

enter image description here

あなたは、私は完全な名前フィールドにラウルを入力した見ることができます。

テーブルビューを上にスクロールして下にスクロールすると、変更された値が失われ、最初のテキストフィールドに古いエントリが表示されます。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    // create a new cell if needed or reuse an old one 
    let regCell = profileManagement.dequeueReusableCell(withIdentifier:"regFirstCell", for: indexPath)as? RegistrationFieldTableViewCell 
    regCell?.registrationField.tag = indexPath.row 
    regCell?.registrationFieldImage.image = fieldImages[indexPath.row] 
    let nameFields = NSLocalizedString(regFieldsNames[indexPath.row], comment: "") 
    regCell?.registrationField.placeholder = nameFields 
    regCell?.registrationField.autocorrectionType = .no 
    regCell?.registrationField.keyboardType = UIKeyboardType.default 
    regCell?.showPassword.isHidden = true 
    //Swith case for giving keypad to textfields 
    switch indexPath.row { 
    case 0: 
     regCell?.registrationField.text = self.name 
    case 1: 
     regCell?.registrationField.text = self.emailId 
    case 2: 
     regCell?.registrationField.text = self.civilId 
     regCell?.registrationField.isUserInteractionEnabled = false 
    case 3: 
     regCell?.registrationField.text = self.phoneNumber 
     regCell?.registrationField.isUserInteractionEnabled = false 
    case 4: 
     regCell?.registrationField.isSecureTextEntry = true 
     regCell?.registrationField.text = "abhijith123" 
     regCell?.showPassword.isHidden = true 
     regCell?.registrationField.isUserInteractionEnabled = false 
    default: 
     print("Something else") 
    } 
    return regCell! 
} 
+0

新しい値を入力すると、その値を保存するためにどのようなコードを使用しますか? –

+0

現在、私は新しい値を格納するコードを使用していません。この方法を提案してください –

答えて

1

考えてみてください。

regCell?.registrationField.text = self.name 

をしかし、あなたは決して変更フィールドにどのようなユーザータイプにself.name:私たちは、行0を見るたびに、あなたが言っています。自然に行0を表示すると、元のself.nameに戻ります。

+0

はい、もちろんあります。だから、テキストフィールドの値を編集するときに何をすべきかを提案してください。 –

+1

'editingChanged'コントロールイベントを得るために、テキストフィールドのアクションターゲットにしてください。または、テキストフィールドのデリゲートで 'textFieldDidEndEditing'を取得します。イベントが発生したら、テキストフィールドの値を読み取り、適切な場所に格納します。ここの例:https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch08p447editInsertAndRearrangeRows/ch21p741editInsertAndRearrangeRows/RootViewController.swift – matt

+0

私はeditingChangedのコードを見ることができます。私たちが使用する必要があるのはそれだけですか? –

3

これは、セルの再利用によるものである:

私は、次のコードを使用しています。

次回セルを表示するときに変更を保存する必要があります。現在、あなたがやっていることは、テキストを変更してスワイプすることです(セルは再利用されます)。次にスワイプします(cellForRowAt関数でセルがリロードされ、値が設定されます)

実際にユーザーが挿入する値を格納して、ユーザーがスクロールしてから再び戻ったときに保存された値が表示されます。

は、そう、配列に値を格納し、そして中には、あなたが3行とテーブルビューを持っていると仮定し

yourlabel.text = yourArray[indexPath.row]を聞かせするには、各行がのTextViewを持っています。 TextFieldにあなたにも

4- cellAtIndex関数でdidEndEditing委任をtextField.text = valuesArray[indexPath.row]を設定

3- cellAtIndex関数でvaluesArray = ["", "", ""]

2-セットtextField.tag = indexPath.row

1-アレイを定義これを設定します:valuesArray[textField.tag] = textField.text

これがうまくいくはずです

これは役に立ちます。

+0

@mattは私がやったことをありがとう! –

+0

@MohammadBashirSidaniあなたの答えにコードを挿入して、ユーザーが挿入している値を保存してください。 –

+0

@ChelseaShawra –

関連する問題