首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pickerView和操作按钮

pickerView和操作按钮
EN

Stack Overflow用户
提问于 2016-10-12 18:44:39
回答 1查看 218关注 0票数 0

我遇到了一个问题,当我试图对pickerView中的特定行执行操作时。

例如,我在pickerView中有多个项目,在核心数据中我有计数器属性,所以我需要做的是,一旦我从pickerView中选择了一个特定的项目,并点击按钮,计数器属性应该增加1。

以下是我尝试过的方法:

代码语言:javascript
复制
var MEDARRAY = [NSManagedObject]()
var Counter:NSInteger?
var thecounte:Int?

@IBOutlet weak var thepicker: UIPickerView!


func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return MEDARRAY.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    self.view.endEditing(true)
    return String(describing: MEDARRAY[row].value(forKey: "medName")!)
}
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)  {
    let NumDay = self.MEDARRAY[row].value(forKey: "medNumDay") as? NSInteger
    let NumMed = self.MEDARRAY[row].value(forKey: "medNum") as? NSInteger
    Counter = (self.MEDARRAY[row].value(forKey: "takenCounter") as? NSInteger)!
    TotalDose.text = String(NumDay! * NumMed!)
    RemainDose.text = String(Int(TotalDose.text!)! - Counter!)

}
//here is the button should increase the counter 
    @IBAction func Taken(_ sender: AnyObject) {
    let Appdelegate = UIApplication.shared.delegate as? AppDelegate
    let context = Appdelegate?.persistentContainer.viewContext
    let newCounter = Counter! + 1
    do{
        // how to specified the did selected row in here to update the counter value for that row
        self.MEDARRAY[newCounter].setValue(newCounter, forKey: "takenCounter")
        try context?.save()
    }catch{
        print(error)
    }
}

如何为选取器视图指定did选定行,以便在按钮函数中使用它?

EN

回答 1

Stack Overflow用户

发布于 2016-10-12 18:58:10

如果您创建另一个名为selectedObject的变量,如下所示:

代码语言:javascript
复制
var selectedObject = NSManagedObject()

并在您的pickerViewDidSelectRow方法中更新它:

代码语言:javascript
复制
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)  {
    let NumDay = self.MEDARRAY[row].value(forKey: "medNumDay") as? NSInteger
    let NumMed = self.MEDARRAY[row].value(forKey: "medNum") as? NSInteger
    Counter = (self.MEDARRAY[row].value(forKey: "takenCounter") as? NSInteger)!

    //updates whenever a new row is selected
    selectedObject = self.MEDARRAY[row]

    TotalDose.text = String(NumDay! * NumMed!)
    RemainDose.text = String(Int(TotalDose.text!)! - Counter!)
}

然后你可以在你的按钮被按下的时候调用它,它会给你最近选择的行,这样你就可以增加它的"count“字段。

代码语言:javascript
复制
@IBAction func Taken(_ sender: AnyObject) {
    let Appdelegate = UIApplication.shared.delegate as? AppDelegate
    let context = Appdelegate?.persistentContainer.viewContext
    let newCounter = Counter! + 1
    do{
        //initialize index variable
        let index = MEDARRAY.indexOf(selectedObject)

        //use index in your MEDARRAY call
        self.MEDARRAY[index].setValue(newCounter, forKey: "takenCounter")
        try context?.save()
    }catch{
        print(error)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39996631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档