斯威夫特:从另一个班级打电话给UIButton

时间:2016-12-13 14:19:23

标签: ios swift uibutton uikit

我有public class MyLinearLayout { private OnItemClickListener mListener; public interface OnItemClickListener { void onClick(int position); } public void setOnItemClickListener(OnItemClickListener listener){ mListener = listener; for (int i = 0; i < getChildCount(); i++) { getChildAt(i).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.onClick(i); } }); } } } ViewController.class

Menu.class我创建并设置了所有按钮,在Menu.class我将菜单添加到视图中。当我运行代码时,屏幕上会显示所有内容,但我无法按下按钮。

这就是我的ViewController的样子:

ViewController.class

这是我的菜单:

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.
    }
}

我的错误是什么。我是否需要进行更多初始化以便能够检测到按下?

1 个答案:

答案 0 :(得分:2)

这是你应该怎么做的。重复buttonTwo和label的操作。在viewDidLoad()中设置视图并在viewDidLayoutSubviews中设置框架。

如果你继承任何UIView,你应该在layoutSubviews()

中设置框架

如果要在单击newGame时显示tableView,请创建一个新的UIViewController。在其中添加UITableView,就像在ViewController中添加Button和Label一样

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")
  }
}