2017-11-21 1 views
0

두 개의 텍스트 필드와 1 개의 레이블이있는 셀을 가진 UITableView가 있다고 가정 해 보겠습니다. 레이블은 텍스트 필드의 숫자의 합계를 표시하므로 사용자가 textField를 편집 할 때마다 레이블이 업데이트됩니다. 내가 직면 한 문제는 사용자가 textField에 입력 할 때마다 tableView.reloadData() 함수를 호출하여 최신 합계로 레이블을 업데이트하고 이로 인해 textField를 종료하고 키보드가 숨겨지는 것입니다. 내가 원하는 건 열린 키보드로 라벨을 갱신하는 거지. 이것을 어떻게 할 수 있습니까? 다음은 샘플 코드입니다.업데이트 UITextview 텍스트가있는 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 값을 대체 된 제안 대체 문자열로 업데이트합니다.

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

당신이 몇 가지 데모 코드를 공유하시기 바랍니다 수 있습니다 EDIT

: 입력 할 때 레이블을 업데이트 할 대리자를 사용하는 HWO 여기 놀이터가 게재되고? 매우 도움이 될 것입니다 –

+0

@ danishnaeem, 코드를 게시 할 수 있습니까, 나는 그것을 수정할 수 있으며 제공 할 수 있습니다. jzk – ahmed

+0

코드로 업데이트 된 답변보기. –

관련 문제