2017-11-21 10 views
0

Sagen wir, ich habe eine UITableView mit einer Zelle mit zwei Textfelder und 1 Label. Da die Beschriftung die Summe der Textfeldnummern anzeigt, wird die Beschriftung aktualisiert, wenn der Benutzer textField bearbeitet. Das Problem, dem ich gegenüberstehe, ist, wann immer der Benutzer in textField tippt, habe ich die Funktion tableView.LoadData() aufgerufen, um das Etikett mit der neuesten Summe zu aktualisieren, was dazu führt, dass textField und keyboard ausgeblendet werden. Ich möchte Etikett mit offener Tastatur aktualisieren. Wie kann ich das erreichen? Folgendes ist der Beispielcode.Update UITableview Zelle mit UITextfield Text ändern

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() 
} 

Vielen Dank im Voraus.

Antwort

0

Ihre TableViewCell sollte UITextFieldDelegate.shouldChangeCharacters(in:replacementString:) implementieren. Geben Sie true von dieser Funktion zurück und aktualisieren Sie Ihre Beschriftung basierend auf dem Wert von textField.text mit dem ersetzten vorgeschlagenen Ersetzungsstring.

EDIT: Hier zeigt ein Spielplatz hwo die Delegaten verwenden, um ein Etikett zu aktualisieren, wie Sie schreiben:

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

können Sie bitte einige Demo-Code teilen? es wäre sehr hilfreich –

+0

@danishnaeem, können Sie Ihren Code veröffentlichen, ich kann das ändern und bieten. jzk – ahmed

+0

Siehe aktualisierte Antwort mit Code. –