在Swift中对UITapGestureRecognizer进行子类化

时间:2016-03-27 18:27:01

标签: ios swift uitapgesturerecognizer

我想将UITapGestureRecognizer作为TapRecognizer的子类,以便我的应用中的页面之间的导航以标准化方式处理:

  1. UITapGestureRecognizer拖到故事板中的任何导航元素上,将其类设置为TapRecognizer,并在视图控制器中将其作为IBOutlet引用(@IBOutlet var heroTapRecognizer: TapRecognizer!
  2. 像这样初始化它们:

    self.heroTapRecognizer = TapRecognizer.init(pageId: 1, pageType: PageType.CategoryPage)
    
  3. 然后在 TapRecognizer.swift

    class TapRecognizer: UITapGestureRecognizer {
        var pageId:Int!
        var pageType:PageType!
    
        convenience init(pageId: Int, pageType: PageType) {
            self.init()
            self.pageId = pageId
            self.pageType = pageType
            self.addTarget(self, action: #selector(TapRecognizer.handleTap(_:)))
        }
    
        func handleTap(sender: UITapGestureRecognizer) {
            if sender.state == .Ended {
                print("Handle navigation based on pageId + pageType")
            }
        }
    }
    

    但上述情况并未奏效。我是Swift的新手,之前只是以编程方式使用UITapGestureRecognizer

    注意:与识别器相关联的UIView上启用了用户互动

1 个答案:

答案 0 :(得分:1)

  

将UITapGestureRecognizer拖到故事板中的任何导航元素上,将其类设置为TapRecognizer,并在View Controller中将它们作为IBOutlet引用

好的,但是你的init永远不会被调用。如果您想要发生特殊情况,请实施awakeFromNib

或者,实施init(coder:)。由于某种原因,这没有记录,但它是实际调用的初始化程序。