通过协议的UIView与UIViewController通信不起作用

时间:2018-10-10 16:40:26

标签: ios swift protocols communication hittest

也许我在这里遗漏了一些非常基本的东西,但是在盯着代码看了一个小时左右之后,我的大脑进入了低谷期,我很高兴能重新审视这个问题。

我有以下val opt: Option[java.lang.Long] = Option(javaLong) // opt: Option[Long] = None (here it's Java's Long)

Option[java.lang.Long]

现在的问题是,当我调用/按下Scala函数时,我在控制台中得到了“ pressed”输出,但是由于某种原因该协议没有通过。

另一面是这样的(为简单起见,已剥离):

Long

我知道执行时的协议值为nil。正如我所说,感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

首先,几个命名约定问题:

对于locationXIBController对象,名称UIView是一个错误的选择。它是一个视图对象,而不是控制器对象。

第二,Swift中的类名称应以大写字母开头。因此LocationXIBView对于该视图类将是一个更好的名称。

接下来,您的代码

let locationXIB = locationXIBController()

...错了。这将创建一个从未安装在视图层次结构中的locationXIBController类的全新实例。您应该将该行作为IBOutlet:

@IBOutlet weak var locationXIB: locationXIBController!

然后应该从StoryBoard中的locationXIBController拖动到视图控制器中的插座。这将导致Interface Builder连接插座。

现在,当您运行程序时,变量locationXIB将在加载情节提要/ XIB时连接到locationXIBController视图。

答案 1 :(得分:1)

除了@Duncan C的答案之外,您还可以检查super.viewDidLoad()类中viewDidLoad()方法顶部的MapViewController是否需要?不这样做可能导致您的应用中出现古怪的事情。

答案 2 :(得分:1)

我问:

  

所以detailViewWillShowUpDelegate实际上指向了什么,还是没有?

您回答:

  

我刚刚尝试调试,但实际上为零

这就是问题所在……您需要设置detailViewWillShowUpDelegate指向有效的委托对象。这通常是在.xib文件或情节提要中完成的,有时人们会忘记建立该连接,因此请检查是否有意义。否则,您只需要在有关代码可以运行和设置之前的某个时候获得对委托的引用即可。

答案 3 :(得分:0)

回答@ Paulw11的信誉

我终于设法通过这样的交流使其工作:

第1步)在MKAnnotation和MKAnnotationView之间通过协议进行1:1通信

步骤2)MKAnnotationView和MapViewController之间通过协议进行1:1通讯,传递相同的数据

最后的效果就像是魅力,谢谢!