【问题标题】:How to access IBOutlet from one class to other class in swift如何快速从一个类访问 IBOutlet 到另一类
【发布时间】:2017-09-06 06:18:24
【问题描述】:

我正在尝试从类 SecTableCell 中的类 ViewController 访问 IBOutlet。 但它显示了下一个错误:

致命错误:在展开可选值时意外发现 nil

class A: UIViewController{
    @IBOutlet  var datePicker: UIDatePicker!
}

所以,这里我想访问其他 B 类中的 datePicker

 class B:UITableViewCell{

    var obj=A()

    @IBAction func datePickerAction(_ sender: Any) {
        obj.datePicker.isHidden=false
    }
 }

请告诉我在这里做错了什么。

【问题讨论】:

  • 如果你的单元格中有数据选择器,那么你应该将出口设置到你的 UITableViewCell 类中
  • 但它不在单元格上,它在顶视图上,我必须通过 viewcontroller 连接,当在特定单元格上单击按钮时,将显示日期选择器。
  • 在您的 didSelectRowAtindexPath 委托方法中显示数据选择器

标签: ios swift swift3


【解决方案1】:

据我了解,您已使用此行创建了 A(UIViewController) 的新实例。

var obj=A()

此初始化程序不会从 Interface builder 加载实例。 因此这里 A 的IBOutletsnil,即datePickernil

当按钮上有操作时,BdatePickerAction 会在 A 存在的地方被调用,但它没有 datePricer 加载(即这里它的 nil),因此崩溃。

要解决您的问题,您需要在单元格中的 A(即 self 此处)中注入或说出 feed

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    //...
    cell.obj = self //Injection
    //...
}

然后 B 将被修改为接受 obj 类型的 A optional

class B:UITableViewCell{

  var obj: A?
  @IBAction func datePickerAction(_ sender: Any) {
      obj?.datePicker.isHidden=false

    }
 }

【讨论】:

  • 我无法访问 cellForRowAt 中的 obj。
  • 请展示您的 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 的样子
猜你喜欢
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多