2014-11-11 1 views
3

UIButton «нажата» функция не вызывается при добавлении в качестве подзадачи UIView. Код, как показано ниже. Однако его работа при удалении setTranslatesAutoresizingMaskIntoConstraints (false). Мне нужно использовать этот метод для автоматического изменения размера макета.Действие UIButton, которое не вызывается при добавлении в UIView с помощью setTranslatesAutoresizingMaskIntoConstraints (false)

var myView = UIView() 
let orderBook = UIButton() 

override func viewDidLoad() { 
     super.viewDidLoad() 

     myView.backgroundColor = UIColor.redColor() 
     myView.setTranslatesAutoresizingMaskIntoConstraints(false) 
     self.view.addSubview(myView) 

     let views1 = ["myView" : myView] 

     var constV = NSLayoutConstraint.constraintsWithVisualFormat("V:|-[myView(>=100)]-|", options: NSLayoutFormatOptions.DirectionLeadingToTrailing, metrics: nil, views: views1) 

     var constH = NSLayoutConstraint.constraintsWithVisualFormat("H:[myView(==100)]|", options: NSLayoutFormatOptions.DirectionLeadingToTrailing, metrics: nil, views: views1) 

     self.view.addConstraints(constH) 
     self.view.addConstraints(constV) 


     orderBook.setTitle("Order Book", forState: UIControlState.Normal) 
     orderBook.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal) 
     orderBook.addTarget(self, action: "pressed:", forControlEvents: UIControlEvents.TouchUpInside) 

     myView.addSubview(orderBook) 
} 
func pressed(sender: UIButton!) { 
    println("pressed") 
} 

override func viewDidLayoutSubviews() 
{ 
    orderBook.frame = CGRectMake(0, 0, myView.frame.width, 100)  
} 
+0

Попробуйте установить userintraction включить "YES" для подвидов –

+0

я поставил myView.userInteractionEnabled = верно. Однако он все еще не работает. – kaneyip

+0

Вы должны установить 'frame' для кнопки' orderBook' или добавить соответствующие ограничения. – rintaro

ответ

3

Я понимаю, что мой ответ немного поздно, но я буду отвечать в любом случае для тех, кто до сих пор с этой проблемой, или придумали обходной путь.

Причина, по которой вы не можете взаимодействовать с UIButton после того, как вы добавили ее в UIView программно, состоит в том, что вы не добавили все необходимые ограничения в UIButton. В моем конкретном случае я не добавил ограничение ширины/высоты. Ниже приведен пример кнопки, которую я создал программно, к которой я добавил в UIView, также созданный программно. Обратите внимание на ограничения, которые я добавил к кнопке.

var popupView = UIView() 
    popupView.setTranslatesAutoresizingMaskIntoConstraints(false) 
    popupView.backgroundColor = Color.fromHex("#FFFFFF", alpha: 1) 
    popupView.layer.cornerRadius = 20 
    popupView.clipsToBounds = true 

    var bottomView = UIView(frame: CGRectMake(0, 0, popupView.frame.size.width, 80)) 
    bottomView.setTranslatesAutoresizingMaskIntoConstraints(false) 

    var singleBtn = UIButton() 
    singleBtn.titleLabel?.font = UIFont(name: "Nunito-Regular", size: 20) 
    singleBtn.setTitleColor(Color.fromHex("#979797", alpha: 1), forState: UIControlState.Normal) 
    singleBtn.setTitleColor(Color.fromHex("#56DAF0", alpha: 1), forState: UIControlState.Highlighted) 

    singleBtn.setTitle("OK", forState: UIControlState.Normal) 
    singleBtn.addTarget(self, action: "singleBtnAction:", forControlEvents: UIControlEvents.TouchUpInside) 
    singleBtn.setTranslatesAutoresizingMaskIntoConstraints(false) 
    singleBtn.backgroundColor = UIColor.redColor() 
    bottomView.addSubview(singleBtn) 

    bottomView.addConstraint(NSLayoutConstraint(item: singleBtn, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 50)) 
    bottomView.addConstraint(NSLayoutConstraint(item: singleBtn, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 50)) 
    bottomView.addConstraint(NSLayoutConstraint(item: singleBtn, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: bottomView, attribute: NSLayoutAttribute.CenterX, multiplier: 1.0, constant: 0)) 
    bottomView.addConstraint(NSLayoutConstraint(item: singleBtn, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: bottomView, attribute: NSLayoutAttribute.CenterY, multiplier: 1.0, constant: 0)) 
+1

Глядя на мою проблему из-под этого угла, помог мне, спасибо. Единственное различие заключается в том, что в моем случае это был не UIButton, который не был полностью определен, а скорее содержательный вид, который не был полностью определен, даже если он выглядел корректно на экране (мне не хватало «верхнего» ограничения) – moliveira

Смежные вопросы