如何将信息从自定义单元类“传递”到viewController?

时间:2016-12-23 23:46:37

标签: swift uitableview

我有一个自定义单元格类,其中包含一个滑块,我想用它来保存整数值(存储为字符串)。滑块的值保存到自定义单元格中的全局变量中,viewController中的save函数应该保存该值。但是,它不会保存更新的值。 (我认识到保存到全局变量然后在不同视图中使用该全局变量不是一个好主意,但我不知道如何传递信息...我已将prepareForSegue用于其他场景但这里没有segue ...滑块位于viewController的单元格中。这是代码:

var moneyValue: Int = Int()
var moneyAmount: String = String()
class CustomCell: UITableViewCell, UITextFieldDelegate {
@IBOutlet weak var moneySlider: UISlider!
    @IBAction func sliderValueChanged(_ sender: UISlider) {
        moneyValue = Int(sender.value)
        moneyLabel.text = String(moneyValue)
        moneyAmount = moneyLabel.text!
    }
}//there is an initializer (not posted) that sets the original value to 0

这是整个viewController代码:

class CreateVC: UIViewController, UITableViewDelegate, UITableViewDataSource, CustomCellDelegate, UITextFieldDelegate, UITextViewDelegate { 
            @IBAction func saveButtonTapped(_ sender: UIBarButtonItem) {
                //save moneyAmount to DB
            }
}

保存到DB非常简单,但无论滑块的位置如何,值“0”始终是保存的值。 “0”是滑块的初始位置,所以我认为问题是滑块的更新值没有以某种方式保存到变量中。 1.如何解决此问题和/或2.如果当前设置不理想,传递此信息的适当方法是什么?

2 个答案:

答案 0 :(得分:0)

根据评论,我编辑了这个答案。

在cell.swift中定义协议

protocol CellDelegate : class
{
    func cellDelegate(moneyValue: Int) -> Void
}
extension CellDelegate
{
    func cellDelegate(moneyValue: Int) -> Void {}
}

class CustomCell: UITableViewCell, UITextFieldDelegate
{
    weak var delegate: CellDelegate?

    var moneyValue: Int = Int()
    var moneyAmount: String = String()
    @IBOutlet weak var moneySlider: UISlider!
    @IBAction func sliderValueChanged(_ sender: UISlider)
    {
        moneyValue = Int(sender.value)
        moneyLabel.text = String(moneyValue)
        moneyAmount = moneyLabel.text!

        if delegate != nil {
            delegate?.cellDelegate(moneyValue: moneyValue)
        }
    }
}

然后,在viewcontroller.swift中实现此协议。该值将从单元格传递到视图控制器。

class CreateVC: UIViewController, CellDelegate
{
    func cellDelegate(moneyValue: Int)
    {
        ...
    }
}

答案 1 :(得分:0)

            class CustomCell: UITableViewCell, UITextFieldDelegate {

            var moneyValue: Int = Int()
            var moneyAmount: String = String()

            @IBOutlet weak var moneySlider: UISlider!
                @IBAction func sliderValueChanged(_ sender: UISlider) {
                    moneyValue = Int(sender.value)
                    moneyLabel.text = String(moneyValue)
                    moneyAmount = moneyLabel.text!
                }

// create action of 'button save' in your custom cell, whenever you clicked on button you get all the values of components here and save your values in your DB
// Now, you don't need to declare global variables,

            @IBAction func saveButtonTapped(_ sender: UIBarButtonItem) {
                        //save moneyAmount to DB
                    }
        }

如果您要在多个UIViewController中使用自定义单元格,则上述方法会失败。然后按以下步骤操作:

  1. 使用委托和协议enter link description here

  2. 闭包(阻止回调)enter link description here