2016-12-13 2 views
1

У меня есть мой ViewController.class и Menu.classSwift: Вызов UIButton пресса из другого класса

В Menu.class я создаю и настройки всех кнопок и в ViewController.class я добавить меню для просмотра. Когда я запускаю код, все отображается на экране, но я не могу нажать кнопку.

Это как мой ViewController выглядит следующим образом:

import UIKit 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let menu = Menu() 
     menu.setupView(controller: self, width: 600, height: 120) 
     self.view.addSubview(menu) 

     // Do any additional setup after loading the view, typically from a nib. 
    } 
} 

И это мое меню:

import Foundation 
import UIKit 

class Menu: UIView{ 

    func setupView(controller: ViewController, width: CGFloat, height: CGFloat){ 

     let newGame = UIButton(frame: CGRect(x: controller.view.center.x, y: 300, width: width, height: height)) 
     newGame.center = CGPoint(x: controller.view.center.x, y: 300) 
     newGame.setTitle("New Game", for: .normal) 
     newGame.backgroundColor = UIColor.gray 
     newGame.titleLabel?.font = UIFont(name: "Helvetica", size: 42) 
     newGame.setTitleColor(UIColor.black, for: .normal) 
     newGame.addTarget(self, action: #selector(Menu.newGame), for: .touchUpInside) 
     self.addSubview(newGame) 

    } 
    func newGame(){ 
     print("New Game") 

    } 
} 

Что моя ошибка. Нужно ли делать больше инициализации, чтобы она могла обнаружить прессу?

+0

Ну, я c/c ваш код, и он даже не компилируется для меня. Первое, что мне интересно, почему Меню не замаскировано прямо из UIButton? Планируете ли вы иметь несколько кнопок? Если да, то сколько? Если вы хотите иметь правильный код, вы должны снова подумать о своей концепции. Если вы только хотите знать, почему это плохо, это потому, что ваш кадр установлен неправильным образом. –

+0

Я планирую иметь 2 кнопки и 1 ярлык. Я удалил код для других 2 вещей, и в меню отсутствует}. Я прошу прощения. –

+0

} это не единственная проблема. Во всяком случае, если бы я был вами, я бы удалил ваше Меню, и я бы создал свои 2 кнопки + ярлык непосредственно в ViewController. –

ответ

2

Так вы должны это сделать. Повторите операцию для buttonTwo и метки. Создайте представление в viewDidLoad() и настройте кадры в viewDidLayoutSubviews.

Если подкласс любой UIView вы должны установить кадры в layoutSubviews()

Если вы хотите, чтобы отобразить Tableview при нажатии на NewGame затем создать новый UIViewController. Добавьте в него UITableView, так же, как вы добавили Button и Label в ViewController

import UIKit 

class ViewController: UIViewController { 

    let buttonOne = UIButton() 
    let buttonTwo = UIButton() 
    let label = UILabel() 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    buttonOne.backgroundColor = UIColor.gray 
    buttonOne.setTitle("New Game", for: .normal) 
    buttonOne.titleLabel?.font = UIFont(name: "Helvetica", size: 42) 
    buttonOne.setTitleColor(UIColor.black, for: .normal) 
    buttonOne.addTarget(self, action: #selector(newGame), for: .touchUpInside) 

    view.addSubview(buttonOne) 
    view.addSubview(buttonTwo) 
    view.addSubview(label) 
    } 

    override func viewDidLayoutSubviews() { 
    buttonOne.frame = CGRect(x: 0, y: 300, width: 600, height: 120) 
    buttonOne.center.x = self.view.center.x 
    } 

    func newGame(sender: UIButton?) { 
    print("New Game") 
    } 
} 
Смежные вопросы