我有一个菜单栏,我想在应用程序的每个页面(UIViewController
)上使用。所以我想我只需要编写一次并在所有页面上使用它,而不是在每个页面上重现相同的代码。为此,我创建了一个新类,使用自己的UIViewController
文件扩展MenuBarViewController
(命名为XIB
),在该类中创建了一个函数,该函数包含用于生成菜单栏,只需在我要放置菜单栏的任何UIViewController
中调用该功能。似乎工作相当无聊,但是当我尝试在MenuBarViewController
类中创建一些帮助函数时会遇到问题,这会触发导航到另一个视图,当其中一个菜单图标被点击时。我将在下面包含我正在使用的代码的简化版本,其中说明了整个问题。
class MenuBarViewController: UIViewController {
func menuBar(viewController:UIViewController){
let menuBar = UIView(frame:CGRectMake(0,0,100,20 ))
menuBar.backgroundColor = UIColor.blackColor()
viewController.view.addSubview(menuBar) //Add the newly created view to the main view(self)
//Add an icon view to the menubar
let iconView = UIImageView(frame: CGRectMake(5,0,5,5))
menuBar.addSubview(iconView)
//Add a gesture recognizer for the icon view
iconView.userInteractionEnabled = true
let tapHomeButton = UITapGestureRecognizer(target: self, action:#selector(MenuBarViewController.goToHomeView(_:)))
iconView.addGestureRecognizer(tapHomeButton)
//Add an icon to the icon view
let iconImageName = UIImage(named:"home.png")!
iconView.image = iconImageName
}
//Helper function to handle the gesture recognizer, helps transition to another view
func goToHomeView(sender: UIImageView!) {
appData.lastView = "GameViewController"
let settingsVC = SettingsViewController(nibName: "SettingsViewController", bundle: nil)
presentViewController(settingsVC, animated: true, completion: nil)
}
}
现在,当我点击图标时,没有回应。所以我想我将类函数(menuBar
和goToHomeView
)声明为“class
”或“static
”funcs,然后直接调用菜单栏班级名称。但是我在调用“在这一行:
animated
'
presentViewController(settingsVC, animated: true, completion: nil)
因此当presentViewController
方法在静态或类函数中声明时,某些内容必定是错误的,因为当我使用goToHomeView
函数时,只需执行像打印某些文本一样简单的操作,它就可以正常工作。所以我现在完全失去了。该怎么办?我是以完全错误的方式解决这个问题吗?