IOS8 и Swift многократные представления с жестами не работают
Я пытаюсь построить пользовательский интерфейс, основанный на общих классах, которые основаны на том же расширении класса UIViewController. Этот пример помещает квадраты на экран, и событие касания будет обрабатываться в родительском классе, но это не работает. Что я делаю неправильно?
Основной 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")
}
}
У меня есть оба квадрата на экране, но действие касания работает только на втором. Есть ли проблемы с этим?
2 ответа
Спасибо всем, кажется интересным, что это работает, только если вы установите рамку родительских представлений.
Так что-то вроде:
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)
...
}
onTap()
принимает аргумент Так должно быть:
onTap(gestureRecognizer: UITapGestureRecognizer)
и добавьте двоеточие после "onTop" в этой строке:
tapForSquare.addTarget(self, action : "onTap")