Ios 协议未启动
我的协议根本没有启动,我正在使它符合我希望它触发的方法。任何帮助都将不胜感激Ios 协议未启动,ios,swift,uibutton,uitapgesturerecognizer,Ios,Swift,Uibutton,Uitapgesturerecognizer,我的协议根本没有启动,我正在使它符合我希望它触发的方法。任何帮助都将不胜感激 public class NoteCardView:UIView { @IBInspectable var delegate: NoteCardViewDelegate? func handleTitleLabelTap(_ recognizer:UITapGestureRecognizer) { // Verified this function is being called and has the r
public class NoteCardView:UIView {
@IBInspectable var delegate: NoteCardViewDelegate?
func handleTitleLabelTap(_ recognizer:UITapGestureRecognizer) {
// Verified this function is being called and has the right value!
self.delegate?.noteCardViewTitleLabelDidRecieveTap(MainViewController.NoteCardArray[Int(recognizer.view!.tag)])
}
}
public protocol NoteCardViewDelegate {
// This should be being fired..
func noteCardViewTitleLabelDidRecieveTap(_ view: NoteCardView!)
}
extension MainViewController: NoteCardViewDelegate {
// this is what the handleTitleLabelTap function should do!
func noteCardViewTitleLabelDidRecieveTap(_ view: NoteCardView!) {
print("6")
let card:NoteCardView = (view)
UIView.animate(withDuration: 0.5, delay: 0.0, options: UIViewAnimationOptions.curveEaseInOut, animations: {
card.contentView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: (self.elementPlacement / 4) + 20)
card.contentView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 100)
}, completion: { (finished: Bool) in
self.elementPlacement = (self.elementPlacement + 1)
card.titleLabelTapGestureRecognizer!.isEnabled = !(self.elementPlacement == 5)
})
}
}
这一行:
self.delegate?.noteCardViewTitleLabelIDRecieveTap(MainViewController.NoteCardArray[Int(recognizer.view!.tag)])
…如果self.delegate为零,则不会执行任何操作。“?”告诉编译器检查nil,并在为nil时停止
我建议添加一份打印声明:
打印(“即将调用委托。委托=\(委托)”)
委托?.noteCardViewTitleLabelIDRecieveTap(MainViewController.NoteCardArray[Int(recognizer.view!.tag)])
顺便说一句,自我是不必要的,你应该忽略它。通常,您只需要在闭包中指定self,在闭包中编译器坚持要包含self,以便“使捕获语义明确”。我的建议是,除非编译器抱怨,否则不要使用self
还要注意的是,说“我的协议没有启动”是没有意义的。协议是一组商定的方法/属性。它就像一个行话,用来在理解协议的对象之间进行通信。最好说“我的委托方法没有被调用。”这一行:
self.delegate?.noteCardViewTitleLabelIDRecieveTap(MainViewController.NoteCardArray[Int(recognizer.view!.tag)])
…如果self.delegate为零,则不会执行任何操作。“?”告诉编译器检查nil,并在为nil时停止
我建议添加一份打印声明:
打印(“即将调用委托。委托=\(委托)”)
委托?.noteCardViewTitleLabelIDRecieveTap(MainViewController.NoteCardArray[Int(recognizer.view!.tag)])
顺便说一句,自我是不必要的,你应该忽略它。通常,您只需要在闭包中指定self,在闭包中编译器坚持要包含self,以便“使捕获语义明确”。我的建议是,除非编译器抱怨,否则不要使用self
还要注意的是,说“我的协议没有启动”是没有意义的。协议是一组商定的方法/属性。它就像一个行话,用来在理解协议的对象之间进行通信。最好说“我的委托方法没有被调用。”为什么要删除前面的问题?设置轻敲手势的代码在哪里?@rmaddy我意识到我之前的问题措词不当,而且有多余的代码。我的点击手势的代码在测试后肯定能正常工作,我输入了print语句,发现它触发了handleTitleLabelTap方法。HandletileLabelTap现在没有触发协议,因此出现了这个问题。抱歉搞混了!显然
self.delegate
是nil
。在确认这是真的之后,找出原因。为什么要删除之前的问题?设置轻敲手势的代码在哪里?@rmaddy我意识到我之前的问题措词不当,而且有多余的代码。我的点击手势的代码在测试后肯定能正常工作,我输入了print语句,发现它触发了handleTitleLabelTap方法。HandletileLabelTap现在没有触发协议,因此出现了这个问题。抱歉搞混了!显然self.delegate
是nil
。确认为真后找出原因。我收集了您接受我的答案并删除了您的评论,询问如何设置您找到答案的代表?我收集了您接受我的答案并删除了您询问如何设置您找到答案的代表的评论?