我正在動態創建頁面,每個頁面都包含一個導航控制器和UIViewController。動態添加UIButton:未註冊的動作
在每個頁面中,有鏈接,圖像,文本等組件。
每個組件是像一個類中的下列:
class link: Component, ComponentProtocol {
var text: String
var url: String
func browseURL(sender: UIButton!){
let targetURL = NSURL(fileURLWithPath: self.url)
let application = UIApplication.sharedApplication()
application.openURL(targetURL!)
}
func generateView() -> UIView?{
var result: UIView?
var y = CGRectGetMinY(frame)
var linkBtn = UIButton(frame: CGRect(x: 0, y:30 , width:300 , height: 50)
linkBtn.setTitle(self.text, forState: UIControlState.Normal)
linkBtn.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
linkBtn.titleLabel?.font = linkBtn.titleLabel?.font.fontWithSize(15)
// this doesn't seem to be registered properly
linkBtn.addTarget(self, action: "browseURL:", forControlEvents: UIControlEvents.TouchUpInside)
result = UIView()
result?.addSubview(linkBtn)
return result
}
然後在頁面的ViewController方法的viewDidLoad中我會這個初始化頁面組件:
for component in components!{
if let acomponent:ComponentProtocol = component as? ComponentProtocol {
if let res = acomponent.generateView(innerFrame) {
if let view = res.view {
self.view.addSubview(view)
}
}
}
}
該按鈕被顯示,但是當我碰觸什麼都不會發生。當我調試時,browseURL根本沒有觸發。
我的代碼有什麼問題?我猜是因爲我在link
類中註冊了該動作,而不是在頁面的ViewController中註冊了該動作?
UPDATE
這可能是一個類似的問題,但答案並非如此簡單,我其實在我的ViewController組件參考:在一臺Mac (Target: Object) not working for setting UIButton from outside viewController
您是使用模擬器還是移動設備? – jperl
@KickimusButticus移動設備 – yonasstephen