2016-11-23 48 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() 
}