UILabel Subclass上的Swift / Action,未调用委托方法

时间:2016-09-29 21:31:52

标签: ios swift

我正在使用ActiveLabel来处理标签中的网址。要使用UIViewController打开WebView以显示网址内容,我想使用委托方法。

我尝试过不同的方法来调试我的问题。

protocol ActiveLabelURLDelegate {
    func activeLabelURLDelegate(url: NSURL)
}

extension FirstVC: ActiveLabelURLDelegate {

    func activeLabelURLDelegate(url: NSURL) {

        print("debug activeLabelURLDelegate called") // THIS PRINT WILL NOT CALLED

        let vc = stb.instantiateViewControllerWithIdentifier("SecondVC") as! SecondVC

        vc.webSite = url        
        self.navigationController?.pushViewController(vc, animated: true)
    }

}

class Cell: UITableViewCell {

    @IBOutlet weak var myLabel: ActiveLabel!
    var labelURLDelegate : ActiveLabelURLDelegate?


    override func awakeFromNib() { 

         myLabel.handleURLTap { givenURL in
             print("Success. You just tapped the \(givenURL) URL") // THIS PRINT IS CALLED
             self.labelURLDelegate?.activeLabelURLDelegate(givenURL)
         }    
     } 
}

在这不起作用后,我实现了一个帮助函数来调试所谓的。

func openURL(url: NSURL) {

    print("debug openURL called") // THIS PRINT IS CALLED AS WELL    
    labelURLDelegate?.activeLabelURLDelegate(url)
}

被叫:

myLabel.handleURLTap { givenURL in
    print("Success. You just tapped the \(givenURL) URL") // STILL CALLED
    self.openURL(givenURL)
}

正如您在print语句中看到的那样,一切都有效,直到委托调用。委托函数activeLabelURLDelegate未被调用。我错过了什么?在同一个单元格和同一个UIViewController中,我使用了UIButtons的其他4位代表,他们的工作非常完美。

PS:链接将在UI&中正确显示为链接。正确的URL将打印到控制台。

1 个答案:

答案 0 :(得分:2)

看起来你忘了挂上代表了。我在单元格代码中看不到labelURLDelegate的作业。