2015-11-24 6 views
1

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

itemView = UIImageView(frame:CGRect(x:0, y:0, width:240, height:375)) 
itemView.backgroundColor = UIColor(red: 255.0/0.0, green: 255.0/0.0, blue: 255.0/0.0, alpha: 0.05) 
itemView.contentMode = .Center 

buttonConnect = UIButton(frame: CGRect(x:0, y:335, width:120, height:40)) 
buttonConnect.backgroundColor = UIColor(red: 0.8, green: 0.6, blue: 0.2, alpha: 1.0) 
buttonConnect.setTitle("Connect", forState: .Normal) 
buttonConnect.tag = 3 
buttonConnect.addTarget(itemView, action: "btnConnectTouched:", forControlEvents:.TouchDown) 
itemView.addSubview(buttonConnect) 

self.addSubview(itemView) 

Способ по нажатию кнопки выглядит следующим образом:

func btnConnectTouched(sender:UIButton!) 
{ 
    print("button connect touched") 
} 

Может кто-то совет, что это проблема? Благодаря!

ответ

5

Я не понимаю, почему вы добавляете кнопку в UIImageView. Даже это то, что вам нужно, возьмите UIView, а затем поместите в него все остальные элементы управления. Причина, по которой ваша кнопка не нажата, заключается в том, что вы поместили ее в UIImageView, а для UIImageView значение по умолчанию для userInteractionEnabled - false. так что вам нужно включить его, то есть

itemView.userInteractionEnabled = true; 

Также задано назначение кнопки «Я», а не itemView.

+0

Это отличный ответ. Большое спасибо! Я изменил 'UIImageView' на' UIView', а также изменил цель на 'self', и он работает – bla0009

1

Вы ошибаетесь в цель:

// buttonConnect.addTarget(itemView, action: "btnConnectTouched:", forControlEvents:.TouchDown) 
    // using 
    buttonConnect.addTarget(self, action: "btnConnectTouched:", forControlEvents:.TouchDown) 
    // or buttonConnect.addTarget(self, action: "btnConnectTouched:", forControlEvents:.TouchUpInside) 
+0

Я попробовал это, и это все еще не работает. – bla0009

+0

@ bla0009 Вы изменили 'itemView' на' self'? – anhtu

+0

@anthu да, и все еще ничего не происходит при нажатии кнопки – bla0009

1
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let buttonConnect = UIButton()  
    buttonConnect = UIButton(frame: CGRect(x:0, y:335, width:120, height:40)) 
    buttonConnect.backgroundColor = UIColor(red: 0.8, green: 0.6, blue: 0.2, alpha: 1.0) 
    buttonConnect.setTitle("Connect", forState: .Normal) 
    buttonConnect.tag = 3 
    buttonConnect.addTarget(self, action: "btnConnectTouched:", forControlEvents: .TouchUpInside)  
    self.view.addSubview(buttonConnect) 
} 

func btnConnectTouched(sender: UIButton!) { 
    print("button connect touched"); 
} 
+0

change forControlEvents: .TouchDown toControlEvents: .TouchUpInside –

2

Попробовать изменить tarjet и событие

buttonConnect.addTarget(itemView, action: "btnConnectTouched:", forControlEvents:.TouchDown) 

в

buttonConnect.addTarget(self, action: "btnConnectTouched:", forControlEvents:. TouchUpInside) 
+0

Я пробовал это, и он все еще не работает. – bla0009

0

попробовать buttonConnect.addTarget(itemView, action: "btnConnectTouched", forControlEvents:.TouchUpInside) без : после "btnConnectTouched"

0

Если вы можете внести следующие два изменения в свой код, он будет работать.

  1. Заменить UIImageView с UIView для типа itemView и
  2. Replace self.addSubview (itemView) с self.view.addSubview (itemView)

Ваш окончательный код должен выглядеть ....

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    var itemView = UIView(frame:CGRect(x:0, y:0, width:240, height:375)) 
    itemView.backgroundColor = UIColor(red: 255.0/0.0, green: 255.0/0.0, blue: 255.0/0.0, alpha: 0.05) 
    itemView.contentMode = .Center 

    var buttonConnect = UIButton(frame: CGRect(x:0, y:335, width:120, height:40)) 
    buttonConnect.backgroundColor = UIColor(red: 0.8, green: 0.6, blue: 0.2, alpha: 1.0) 
    buttonConnect.setTitle("Connect", forState: .Normal) 
    buttonConnect.tag = 3 
    buttonConnect.addTarget(self, action: "btnConnectTouched:", forControlEvents:.TouchDown) 


    itemView.addSubview(buttonConnect) 

    self.view.addSubview(itemView) 

} 

func btnConnectTouched(sender:UIButton!) 
{ 
    print("button connect touched") 
} 

Попробуйте это .... это работает для меня ....

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