2015-01-03 34 views
1

我想建立一个基于泛型类,基于UIViewController类的相同扩展的用户界面。这个例子在屏幕上放置正方形,tap事件将在父类中处理,但它不起作用。我究竟做错了什么?IOS8和Swift多个视图与手势不工作

主要ViewController.swift:

class ViewController : UIViewController { 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    //FIRST SQUARE 
    let widget1 = TestWidget() 
    widget1.viewX = 10 
    widget1.viewY = 10 
    self.view.addSubview(widget1.view) 
    self.addChildViewController(widget1) 
    widget1.didMoveToParentViewController(self) 

    //SECOND SQUARE 
    let widget2 = TestWidget() 
    widget2.viewX = 100 
    widget2.viewY = 100 
    self.view.addSubview(widget2.view) 
    self.addChildViewController(widget2) 
    widget2.didMoveToParentViewController(self) 
    } 

} 

这里是TestWidget类:

class TestWidget : UIViewController { 

    var viewX : CGFloat! 

    var viewY : CGFloat! 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    let square = UIView() 
    square.frame = CGRect(x : viewX, y : viewY, width: 50, height: 50) 
    square.backgroundColor = UIColor.orangeColor() 
    self.view.addSubview(square) 
    //GESTURE PART 
    var tapForSquare = UITapGestureRecognizer() 
    tapForSquare.addTarget(self, action : "onTap") 
    square.addGestureRecognizer(tapForSquare) 
    square.userInteractionEnabled = true 
    square.multipleTouchEnabled = true 
    } 

    func onTap() { 
    println("square tapped") 
    } 
} 

我有两个方形的屏幕上,但水龙头操作仅适用于第二个。这有什么问题吗?

+0

我怀疑问题是与事实只有一个视图控制器可以是父一次,这样以来你设置WIDGET2的做父亲2,它是唯一的父视图控制器。我试图找到证明这一点的文档 - 但我想也许这就是为什么它是唯一的视图控制器正在接受触摸。一般来说,我会推荐一种不同于嵌入包容视图控制器(而不是简单嵌入UIViews)的方法来实现你想要做的事情。 –

回答

0

onTap()需要一个参数。它应该是:

onTap(gestureRecognizer: UITapGestureRecognizer)

后“ontop的”在此行中添加一个冒号:

tapForSquare.addTarget(self, action : "onTap")

+1

这不是事实。它不需要*接受争论。 –

0

谢谢大家,看来有趣的是,如果你设置父视图帧这只适用以及。

因此,像:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.view.frame = CGRect(x : viewX, y : viewY, width: 50, height: 50) 
    let square = UIView() 
    square.frame = CGRect(x : 0, y : 0, width: 50, height: 50) 
    square.backgroundColor = UIColor.orangeColor() 
    self.view.addSubview(square) 
    ... 

}