使用选定的UIPicker行作为自定义UITableViewCell UILabel SWIFT的文本

时间:2015-04-02 02:45:11

标签: ios uitableview swift uipickerview

我几天来一直在抨击这种情况,尝试了许多不同的方法。我有一个UITableView,自定义单元格包含两个UILabel。在选择单元格时,会显示UIPicker,并设置一个变量,引用哪个单元格被轻敲。

在UIPicker中进行选择后,我需要获取该值并使用它来替换其中一个单元格标签的现有.text。我尝试过几种不同的方式使用.viewWithTag(首先标记标签本身,然后是整个单元格)并且没有任何效果。

我选择的选择是:

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        println("pickerView did select row \(row)")

        if(self.getStatus() == "newFirst"){
            switch (editingField){
            case 0:
                var l:NewOrderCell! = tableView.viewWithTag(editingField) as? NewOrderCell
                //the label in the custom cell is called 'Text'
                l.Text.text = pickerData[row]
                println("should be changing \(l.Text.text) into \(pickerData[row])")
            default:
                var l:NewOrderCell! = tableView.viewWithTag(editingField) as? NewOrderCell
                l.Text.text = pickerData[row]
            }
        }
        picker.hidden=true
    }

并且我的表的cellForRowAtIndexPath是:

var cell:NewOrderCell = tableView.dequeueReusableCellWithIdentifier("NewOrderCell") as NewOrderCell
                //label
                cell.Label.text = self.newOrder[indexPath.row]
                //text
                cell.Text.text = "Please Select"
                cell.tag = indexPath.row
                return cell

我知道我的目标,但无法正确处理从另一种方法引用表格中的单元格的方法。谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

我提出了一个有效的解决方案,但我认为它不够优雅且难以维护:当选择了选择器行时,该文本将写入用于最初填充表的数组(覆盖原始项目) ),然后我重新加载表,以便出现新值。所以,它是这样的:

var truth: [String:String] = ["Key1":"","Key2":"","Key3":""]
var keys:[String] = ["Key1", "Key2","Key3"]

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:NewOrderCell = tableView.dequeueReusableCellWithIdentifier("NewOrderCell") as NewOrderCell
     //label
     cell.Label.text = keys[indexPath.row]
     //textfield
     if(truth[keys[indexPath.row]] == ""){
            cell.Text.text = "Please Select"
     }
     else{
            cell.Text.text = truth[keys[indexPath.row]]
     }
     return cell
}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    truth[keys[editingField]] = pickerData[row]
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
         self.tableView.reloadData()
    })

}

很高兴听到更好的解决方案