2016-11-11 3 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

@dan 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!) 
}