【发布时间】:2018-10-10 16:40:25
【问题描述】:
也许我在这里遗漏了一些真正基本的东西,但是在盯着代码一个小时左右之后,我的大脑正在经历循环,我希望能重新审视这个问题。
我有以下UIView:
import UIKit
protocol DetailViewWillShowUpDelegate {
func sendDetailOpened(_ openedBool: Bool)
}
class locationXIBController: UIView {
@IBOutlet weak var loationLabel: UILabel!
@IBOutlet weak var vsedniOteviraciDobaLabel: UILabel!
@IBOutlet weak var prijmajiKartyLabel: UILabel!
@IBOutlet weak var detailViewButtonOutlet: UIButton!
@IBOutlet weak var backgroundViewButton: UIButton!
let openedBool = true
var detailViewWillShowUpDelegate: DetailViewWillShowUpDelegate?
override func awakeFromNib() {
super.awakeFromNib()
}
@IBAction func vecerkaDetailButtonPressed(_ sender: UIButton) {
detailViewWillShowUpDelegate?.sendDetailOpened(openedBool)
print("pressed")
}
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if let result = detailViewButtonOutlet.hitTest(convert(point, to: detailViewButtonOutlet), with: event) {
return result
}
return backgroundViewButton.hitTest(convert(point, to: backgroundViewButton), with: event)
}
}
现在的问题是,当我调用/按下 vecerkaDetailButtonPressed 函数时,我在控制台中得到“按下”输出,但由于某种原因协议没有通过。
另一面看起来像这样(为简单起见,去掉了):
class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
let locationXIB = locationXIBController()
let isVecerkaDetailOpened = false
override func viewDidLoad() {
locationXIB.detailViewWillShowUpDelegate = self
}
extension MapViewController: DetailViewWillShowUpDelegate {
func sendDetailOpened(_ openedBool: Bool) {
isVecerkaDetailOpened = openedBool
print("success")
}
}
我知道执行时的协议值为零。正如我所说,感谢任何帮助,谢谢!
【问题讨论】:
-
那么
detailViewWillShowUpDelegate实际上指向任何东西,还是没有? -
@Caleb 我刚刚调试了一下,其实是
nil -
您在哪里将
locationXIB添加到您的MapViewController? -
@UpholderOfTruth 感谢您的回复:我不是,locationXIBController 用作自定义
MKAnnotation类,用于自定义MKAnnotationView类,但是我需要以某种方式连接实例locationXIBController是通过点击一个地图注释来调用的,并将这个locationXIBController类的信息发送到MapViewController,你的问题(一个很好的问题)实际上是我要解决的问题 -
您的
LocationInformationAnnotationView需要有一个委托属性,以便它可以将消息传递给您的MapViewController。如果LocationInformationAnnotationView包含LocationXIBController,则注释视图应将自己设置为视图委托并将上游传递给其委托(地图视图控制器)
标签: ios swift protocols communication hittest