2017-01-07 5 views
0

Ich habe eine Schaltfläche programmgesteuert erstellt und möchte einen Touch-Ereignishandler hinzufügen. Ich habe alle Tricks ausprobiert, die ich online gefunden habe, aber die gewünschte Funktion wird nie ausgelöst.Swift - UIButton erstellt programmatisch löst kein Berührungsereignis

upgradeNowView = UIButton() 
upgradeNowView.setTitle("Upgrade", forState: .Normal) 
upgradeNowView.contentMode = UIViewContentMode.ScaleToFill 
upgradeNowView.frame = CGRect(x: upgradeNowView.frame.minX, y: -50 , width: 320, height: 50) 
upgradeNowView.userInteractionEnabled = true 
upgradeNowView.sendActionsForControlEvents(.TouchUpInside) 
upgradeNowView.addTarget(self, action: #selector(MainViewContainer.upgradeTapped(_:)), forControlEvents: .TouchUpInside) 
side_menu_controller?.view.addSubview(upgradeNowView) 

und definiert diese

func upgradeTapped(sender: UIButton) 
{ 
    UpgradeViewController.openUpgrade() 
} 

Aber das wird einfach nie genannt. Jede Hilfe wäre willkommen.

+5

Ihr Selektor befindet sich auf 'MainViewContainer' und der Button befindet sich in' side_menu_controller' –

Antwort

0

Sie müssen upgradeTapped Funktion in Klasse side_menu_controller Instanz definieren. Ich denke, es ist SideMenuController Klasse.

0

fand ich heraus, dies wurde durch die Tatsache, dass ich auf die Schaltfläche neben der Ansicht war Platzierung, aber außerhalb seiner Grenzen (nur oben):

upgradeNowView.frame = CGRect(x: upgradeNowView.frame.minX, y: -50 , width: 320, height: 50) 

Es gibt zwei Möglichkeiten, um dieses:

  • den Knopf innerhalb der Grenzen der übergeordneten Ansicht bewegen oder
  • Griff berührt außerhalb der Ansicht von „hitTest“ zwingenden als here diskutiert