【问题标题】:How to access IBOutlet in UITableViewController Class if the IBOutlet is in UIViewController Class如果 IBOutlet 在 UIViewController 类中,如何访问 UITableViewController 类中的 IBOutlet
【发布时间】:2018-11-05 18:47:21
【问题描述】:

 class AClass: UIViewController,CLLocationManagerDelegate,MKMapViewDelegate {

        @IBOutlet var mapKitView: MKMapView!

        }

    class BClass: UITableViewController {

    var localAClass=AClass()
    localAClass.mapKitView.mapType=MKMapType.standard 

    }

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

【问题讨论】:

  • 你链接了 IBOutlet ?
  • 是的,我当然链接了它
  • AClass 是否可以访问 BClass 的对象,反之亦然?在您的代码块中,您实际上是在创建一个新的 AClass 实例,这可能与您期望从现有的 AClass 实例访问不同。跨度>

标签: ios swift uitableview


【解决方案1】:

在 ClassB 中,您需要使用 UIStoryboard instantiateViewController(withIdentifier:) 来实例化 IBOutlets。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let viewController = 
storyboard.instantiateViewController("AClassIdentifier") as! 
AClass

然后,IBOutlets 视图在该类的 viewDidLoad() 之前不会被实例化。您的ClassA 需要第二个属性,例如mapType,并且ClassB 设置该属性而不是直接在视图上。然后在ClassA viewDidLoad你可以根据这个存储的属性设置实际的mapView。

【讨论】:

  • 感谢您的回答,但我不确定在我的情况下“AViewController”是什么,它看起来像一个 id,但我在哪里可以找到它?
  • 更新了我的答案,使其更加清晰。字符串“AClassIdentifier”在身份检查器(第 3 个选项卡)中身份 > 故事板 ID 下的故事板上定义
  • 让 storyboard = UIStoryboard(name: "Main", bundle: nil) let viewController = storyboard.instantiateViewController(withIdentifier: "AClassID") as! A类
  • 我遇到了同样的致命错误:在展开可选值时意外发现 nil
  • 更新了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
相关资源
最近更新 更多