2015-01-03 53 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) 
    ... 

}