2016-11-11 26 views
0

我從xib創建自定義視圖。我想在關閉內部時觸摸視圖,但不能識別選擇器。我用它作爲;在自定義視圖中定義點按手勢時出現無法識別的選擇器錯誤[Swift]

  1. closeView
  2. self.closeView
  3. ToolTipView.closeView

沒有一次成功。你有什麼想法我做錯了什麼?


class ToolTipView: UIView { 

    @IBOutlet private var contentView:UIView? 

    override init(frame: CGRect) { // for using CustomView in code 
     super.init(frame: frame) 
     self.commonInit() 
    } 

    required init?(coder aDecoder: NSCoder) { // for using CustomView in IB 
     super.init(coder: aDecoder) 
     self.commonInit() 
    } 

    private func commonInit() { 
     NSBundle.mainBundle().loadNibNamed("ToolTipView", owner: self, options: nil) 
     guard let content = contentView else { return } 
     content.frame = self.bounds 
     content.autoresizingMask = [.FlexibleHeight, .FlexibleWidth] 
     self.addSubview(content) 
    } 

    func showTip(viewToAlign: UIView){ 

     //some unrelated code 

     UIApplication.sharedApplication().keyWindow!.addSubview(contentView!) 

     contentView!.userInteractionEnabled = true   
     let tapGesture = UITapGestureRecognizer.init(target: contentView, action: #selector(self.closeView)) 
     contentView!.addGestureRecognizer(tapGesture) 

    } 

    func closeView() { 
     self.removeFromSuperview() 
    } 
} 
+1

你的目標應該是'self',不'contentView' – dan

+0

@丹closeView沒有得到當目標是自調用。 – mkeremkeskin

+0

@Essenceofchickens這些更改也不起作用。我認爲問題是關於添加視圖到keyWindow,但我無法弄清楚。 – mkeremkeskin

回答

0

事實證明,這是關係到我的代碼,我說,不相關的代碼部分。

我正在改變計算我的自定義視圖的相對位置。我改變了contentView的框架,這是錯誤的部分。相反,我操縱self。現在一切都按我的意願工作。

工作版本我的功能:

func showTip(viewToAlign: UIView, viewToAdd: UIView){ 

    self.userInteractionEnabled = true 

    let relativeFrame = viewToAlign.convertRect(viewToAlign.bounds, toView: nil) 
    let relativeCenter = viewToAlign.convertPoint(viewToAlign.bounds.origin, toView: nil) 

    self.frame = CGRectMake(relativeFrame.minX - (self.frame.size.width + 5), relativeCenter.y - self.frame.size.height/2 , self.frame.size.width, self.frame.size.height) 

    self.layer.masksToBounds = false 
    self.layer.shadowOffset = CGSizeMake(0, 0) 
    self.layer.shadowRadius = 5 
    self.layer.shadowOpacity = 0.5 

    viewToAdd.addSubview(self) 

    tapGesture = UITapGestureRecognizer.init(target: self, action: #selector(closeView)) 
    viewToAdd.addGestureRecognizer(tapGesture!) 
} 
相關問題