2016-11-11 19 views
0

xibからカスタムビューを作成しています。私は内部に触れたときにビューを閉じたいが、セレクターは認識されない。私はそれを使った。カスタムビューでタップジェスチャーを定義するときにセレクタエラーが認識されない[Swift]

  1. closeView
  2. self.closeViewそれらの

どれも働いた

  • 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

    あなたのターゲットは、ターゲットが自己のとき 'contentView' – dan

    +0

    @dan closeViewが呼び出されませんではない、' self'でなければなりません。 – 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!) 
    } 
    
    関連する問題