2016-11-23 57 views
0

我有一个从UIView继承的自定义类。在这一类我添加了一个手势识别器以它为这样将UIGestureRecorgniser的代理设置为父项

//CustomParentView.swift 

class CustomParentView: UIView, UIGestureRecognizerDelegate { 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     setupGestureRecognizer() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    func setupGestureRecognizer() { 
     let tap = UITapGestureRecognizer(target: self, action: #selector(CustomParentView.viewTapped(sender:))) 
     tap.delegate = self 
     self.addGestureRecognizer(tap) 
    } 

    func viewTapped(sender: UITapGestureRecognizer) { 
     print("View tapped") 
    } 
} 

然后,我有另一个类,从CustomParentView继承,我最终必须从它继承了几个UIViews,但委托手势识别器ISN设置为CustomParentView,它被设置为继承它的视图。这意味着我需要将viewTapped函数移动到每个CustomParentView的子类中,并在每个类中重复使用该函数。

所以我的问题是如何设置的手势识别器是CustomParentView的委托,并为它留在CustomParentView

+0

为您塑造孩子的情况下,从它的父类的所有成员成为孩子的成员。像'backgroundColor'是'UIView'成员,但是你可以在'UIImageView','UITableView'和all中设置它。它将表现为孩子的'backgroundColor'。那么你想要做什么? –

+0

关闭视图 –

+0

关闭父类中的父项。其子女自动解雇。 –

回答

0

然后,我有另一个类,从CustomParentView继承,我 最终将有几个从它继承的UIViews,但手势识别器的 代表没有设置为CustomParentView,它被设置为继承它的视图。

无论您指定哪个类作为手势识别器委托,它只需实现UIGestureRecognizerDelegate协议。 CustomParentView的任何子类都将实现此协议,因为基类是这样的。

这意味着我需要将viewTapped函数移动到每个CustomParentView的子类中,并在每个类中重复使用该函数。

不,你不知道。这不是面向对象编程和继承的工作方式。 CustomParentView的所有子类都将具有viewTapped方法。

所以我的问题是我怎么设置手势识别器 委托是CustomParentView并为它留在CustomParentView

你有什么作品。你试过了吗?

你也应该调用setupGestureRecognizer从其他init使其作品在故事板创建的视图:好尽快

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    setupGestureRecognizer() 
}