【问题标题】:Swift, pass data from dynamic cell row selection to popover view controllerSwift,将数据从动态单元格行选择传递到弹出视图控制器
【发布时间】:2020-09-10 21:31:45
【问题描述】:

我的问题是是否可以将数据从选定的 tableview 单元格传递到其他视图控制器

第一个控制器中的表格视图使用原型单元格

第二个视图控制器有 3 个其他标签,如下所示

我尝试了这里描述的内容:passing data,但它没有用,并给了我错误“UIStoryboardPopoverPresentationSegueTemplate 的占位符”,我从阅读this old thread top answer 中了解到这是因为我使用的是原型单元及其动态

我想要的是,每次用户选择一行时,第二个视图控制器都会填充这种关系

字符串 1 → 字符串 4

字符串 2 → 字符串 5

字符串 3 → 字符串 6

到目前为止,我已经尝试了一些类似的方法:

     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            tableView.deselectRow(at: indexPath, animated: true)
            let vc = storyboard?.instantiateViewController(identifier:  "secondVC") as! CalculadoraViewController
            present(vc, animated: true)
            let string4 = string4array[indexPath[1]]
            performSegue(withIdentifier: "secVC", sender: string4)            
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let vc = segue.destination as? CalculadoraViewController {
            vc.string4.text = (sender as! String)
        }
    }

弹出视图控制器代码:

class CalculadoraViewController: UIViewController {

    @IBOutlet weak var string4: UILabel!
    @IBOutlet weak var string5: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

【问题讨论】:

    标签: ios swift uitableview uiviewcontroller popover


    【解决方案1】:

    这是传递数据的方式

    class CalculadoraViewController: UIViewController {
    
        @IBOutlet weak var montoUSD: UITextField!
        @IBOutlet weak var montoCRC: UITextField!
        @IBOutlet weak var prVenta: UILabel!
        @IBOutlet weak var prCompra: UILabel!
        var prVentaText:String!
        var prCompraText:String!
    
    
        override func viewDidLoad() {
    
            prVenta.text = prVentaText
            prCompra.text = prCompraText
    
    
            montoUSD.placeholder = montoCRC.text
            super.viewDidLoad()
        }
    }
    
    
       func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            tableView.deselectRow(at: indexPath, animated: true)
            let vc = storyboard?.instantiateViewController(identifier:  "calculadora") as! CalculadoraViewController
    
            vc.prCompraText = String(precioCompra[indexPath.row])
            vc.prVentaText =  String(precioVenta[indexPath.row])
    
        present(vc, animated: true)
    
    }
    

    【讨论】:

    • 嗨,我试过了,问题是“if”给了我这个错误:“条件绑定的初始化程序必须具有可选类型,而不是'Float'”。谢谢
    • 现在我得到这个“致命错误:在隐式展开可选值时意外发现 nil”
    • 可以分享demo项目来测试一下吗?
    • 您在哪里遇到这个问题?哪个控制器?
    • 也向您发送了拉取请求...希望对您有所帮助...快乐编码 =)
    【解决方案2】:

    如果您提交的是View-Controller,则无需执行segue:

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let vc = storyboard?.instantiateViewController(identifier: "secondVC") as! CalculadoraViewController
        vc.string4.text = string4array[indexPath.row]
        present(vc, animated: true)         
    }
    

    【讨论】:

    • 好的,我知道要显示第二个视图控制器我不需要 segue,但问题是如何将数据从选定的表视图单元格传递到第二个视图控制器
    • 答案中已经给出了。 vc.string4.text = "Whatever data you need to pass"
    猜你喜欢
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多