将textField值保存到单元格textLabel(名称)[SWIFT]

时间:2017-07-08 09:25:57

标签: ios swift swift3

我要做这样的事情https://i.stack.imgur.com/jAGsk.png

因此,如果用户输入点 - 它会将点数保存到用户的名字。怎么做?我在tableViewCell中使用函数粘贴textField。 这是tableViewCell文件中的代码

@IBOutlet weak var inputScore: UITextField!

public func configure(text: Int?, placeholder: String) {
    inputScore.text = String(text!)
    inputScore.placeholder = placeholder

    inputScore.accessibilityValue = String(text!)
    inputScore.accessibilityLabel = placeholder
}

这是来自VC文件的代码

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "InputScore") as! InputScoreTableViewCell
    cell.textLabel?.text = usersIn[indexPath.row]
    cell.configure(text: 100, placeholder: "Score")
    return cell
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return usersIn.count
}

那么如何将其保存为用户名?

3 个答案:

答案 0 :(得分:0)

您必须为用户创建数据模型:

class User: NSObject {
    var points = 0
}

然后在视图控制器中创建一组用户:

var users = [User]()

这样,你可以做这样的事情

var user = users[indexPath.row]
user.points = 100
print(user.points) // 100

然后,您可以显示您的用户'表视图中的点。您还可以将tag分配给等于indexPath.row的文本字段,以便您可以轻松使用它们。

答案 1 :(得分:0)

在使用@Cesare提供的用户模型之前,我们需要修改cellForRowAtIndexPath方法和您的单元格的实现,为数据更改事件添加闭包,并使用它

@IBOutlet weak var inputScore: UITextField!
fileprivate var fnDataWasUpdated : (Int?) -> Void = {_ in} //closure for data change notification

public func configure(text: Int?, placeholder: String,_ fnListener: @escaping (Int?) -> Void) {
    inputScore.text = String(text!)
    inputScore.placeholder = placeholder

    inputScore.accessibilityValue = String(text!)
    inputScore.accessibilityLabel = placeholder

    //added delegate implementation for UITextField
    inputScore.delegate = self
    self.fnDataWasUpdated = fnListener
}

还需要您的单元格采用UITextFieldDelegate协议

extension InputScoreTableViewCell : UITextFieldDelegate
{
    func textFieldDidEndEditing(_ textField: UITextField)
    {
        if let intValue = Int(textField.text)
         {
             self.fnDataWasUpdated(intValue)
         }
    }
}

最后我们在您的单元格中使用新的闭包

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "InputScore") as! InputScoreTableViewCell
    let currUser = self.users[indexPath.row]
    cell.configure(text: currUser.points, placeholder: "Score",{ (newIntValue) in
                currUser.points = newIntValue
            })
    return cell
}

此代码未经过测试,但我在多个项目中一直使用主要概念,所以如果您遇到任何问题请告诉我

我希望这有助于你

答案 2 :(得分:0)

  

使用DidSelectRowAtIndexPath方法在textField中获取单元格textLable文本。

以下示例代码:

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

    @IBOutlet var btnOK: UIButton!
    @IBOutlet var txtValue: UITextField!
    @IBOutlet var tblData: UITableView!
    let arrResult = NSMutableArray()

    override func viewDidLoad() {
        super.viewDidLoad()


        tblData.dataSource = self
        tblData.delegate = self
        btnOK.tag = 57775
        btnOK.addTarget(self, action: #selector(applyEdit(sender:)), for: .touchUpInside)
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrResult.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
        cell.textLabel?.text = arrResult[indexPath.row] as? String ?? ""
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        btnOK.tag = indexPath.row
        let cell: UITableViewCell = tableView.cellForRow(at: indexPath)!
        txtValue.text = cell.textLabel?.text
        setTitle()
    }

    func setTitle() {
        if btnOK.tag == 57775 {
            btnOK.setTitle("Add", for: .normal)
        }else{
            btnOK.setTitle("Update", for: .normal)
        }
    }

    func applyEdit(sender: UIButton) {
        if sender.tag == 57775 {
            arrResult.add(txtValue.text ?? "")
        }else{
            arrResult.removeObject(at: sender.tag)
            arrResult.insert(txtValue.text ?? "", at: sender.tag)
            sender.tag = 57775
            setTitle()
        }
        txtValue.text = ""
        tblData.reloadData()
    }


}
  

输出:

enter image description here