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")

Другие вопросы по тегам