2017-11-21 9 views
0

たとえば、私は2つのテキストフィールドと1つのラベルを持つセルを持つUITableViewを持っています。ラベルにはテキストフィールドの数値の合計が表示されるため、ユーザーがtextFieldを編集するたびにラベルが更新されます。問題は、私が直面しているのは、ユーザーがtextFieldをタイプするたびに、私はtableView.reloadData()関数を呼び出して最新の合計でラベルを更新し、この結果textFieldを辞めることになり、キーボードが隠れます。私がしたいのは、開いているキーボードでラベルを更新することです。どうすればこれを達成できますか?サンプルコードは次のとおりです。update UITextfieldのテキストを持つUITableviewセル

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomCell 
    cell.textField1.tag = indexPath.row 
    cell.textField2.tag = indexPath.row 
    cell.textField1.addTarget(self, action: #selector(textField1Edited), for: .editingChanged) 
    cell.textField2.addTarget(self, action: #selector(textField2Edited), for: .editingChanged) 
    cell.sumLabel.text = "\(textField1Values[indexPath.row]+textField2Values[indexPath.row])" 
return cell 
} 
@objc func textField1Edited(sender: UITextField!) { 
    textField1Values[sender.tag] = sender.text 
    self.tableView.reloadData() 
} 
@objc func textField2Edited(sender: UITextField!) { 
    textField2Values[sender.tag] = sender.text 
    self.tableView.reloadData() 
} 

ありがとうございます。

答えて

0

あなたのTableViewCellはUITextFieldDelegate.shouldChangeCharacters(in:replacementString:)を実装する必要があります。この関数からtrueを返し、textField.textの値に基づいて置き換えられた提案replacementStringでラベルを更新します。

EDIT:ここは、入力時にラベルを更新するために、デリゲートを使用するHWO示す遊び場です:

import PlaygroundSupport 
import UIKit 

class V: UIViewController { 
    let label = UILabel() 
    let textField = UITextField() 
    let stackView = UIStackView() 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     stackView.translatesAutoresizingMaskIntoConstraints = false 
     view.addSubview(stackView) 
     stackView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
     stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true 
     stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true 
     stackView.addArrangedSubview(label) 
     stackView.addArrangedSubview(textField) 
     stackView.axis = .vertical 
     label.backgroundColor = .white 
     label.text = " " 
     textField.backgroundColor = .white 
     textField.placeholder = "Enter a number" 
     textField.delegate = self 
     textField.keyboardType = .numberPad 
    } 
} 

extension V: UITextFieldDelegate { 
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
     guard let text = textField.text else { 
      return true 
     } 
     let proposed = text.replacingCharacters(in: Range(range, in: text)!, with: string) 
     label.text = "You Entered \(proposed)" 
     return true 
    } 
} 

PlaygroundPage.current.liveView = V() 
+0

あなたは、いくつかのデモコードを共有してくださいすることができますか?それは非常に役に立ちます –

+0

@ danishnaeem、あなたのコードを投稿することができます、私はそれを変更して提供することができます。 jzk – ahmed

+0

コードで更新された回答を参照してください。 –

関連する問題