Я пытаюсь создать пользовательский интерфейс на основе общих классов, основанных на том же расширении класса 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")
}
}
У меня есть и квадраты на экране, но действие кран работает только на второй. Есть ли проблемы с этим?
Я подозреваю, что проблема связана с тем, что только один вид контроллера может быть родителем сразу, так что с тех пор вы настраиваете WIDGET2 как parent 2nd, это единственный родительский контроллер представления. Я пытаюсь найти документацию, чтобы подтвердить это, но я думаю, что, возможно, именно поэтому это единственный контроллер просмотра, который получает штрихи. В целом, однако, я бы рекомендовал другой метод, чем встраивание контроллеров представления сдерживания (в отличие от простого внедрения UIViews) для достижения того, что вы пытаетесь сделать. –