2015-01-03 6 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 как parent 2nd, это единственный родительский контроллер представления. Я пытаюсь найти документацию, чтобы подтвердить это, но я думаю, что, возможно, именно поэтому это единственный контроллер просмотра, который получает штрихи. В целом, однако, я бы рекомендовал другой метод, чем встраивание контроллеров представления сдерживания (в отличие от простого внедрения 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) 
    ... 

}