从swift中的子类函数导航到viewcontroller

时间:2017-02-06 11:18:32

标签: ios iphone swift swift3 xcode8

我使用UINavigationController创建了UIToolbar。在UIToolbar内,有多个UIBarButtonItemsUIToolbar有一个子类,我用它来设置工具栏设置并创建UIBarButtonItems

UIBarButtonItem我要导航到另一个ViewController。正如您在下面的代码中看到的,我为.addTarget创建了一个名为“settingsPressed”的函数。

//SetToolbar

class ToolbarClass: UIToolbar {

//Set height of toolbar
override func sizeThatFits(_ size: CGSize) -> CGSize {
    var size = super.sizeThatFits(size)
    size.height = 60
    return size
}

//Toolbar settings
override func layoutSubviews() {
    super.layoutSubviews()

    //Default
    self.isTranslucent = false
    self.barTintColor = UIColor(red: 48/255, green: 148/255, blue: 172/255, alpha: 1)

    //Buttons

    //Settings
    let settingsBtn = UIButton()
    settingsBtn.frame = CGRect(x: 0, y: 0, width: 46, height: 46)
    settingsBtn.setImage(UIImage(named: "Settings-Button")?.withRenderingMode(.alwaysOriginal), for: .normal)
    settingsBtn.addTarget(self, action: #selector(self.settingsPressed), for: .touchUpInside)
    let settingsButton = UIBarButtonItem()
    settingsButton.customView = settingsBtn


    self.setItems([settingsButton], animated: false)

}

func settingsPressed() {
   //How to navigate to a viewcontroller?
}

}

我发现了一些快速代码导航到另一个viewcontroller,但这些代码在我的情况下不起作用,因为我正在使用子类。在这种情况下,“。self.storyboard?”没有意义:

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "ClassesOverviewViewController") as!  ClassesOverviewViewController
self.navigationController?.pushViewController(secondViewController, animated: true)

1 个答案:

答案 0 :(得分:1)

您的实施违反了MVC原则并导致您根本不应该面对的问题。 您不应该将控制器逻辑(创建新VC并导航到它)添加到视图中(UIToolbar和它的子类是视图元素)。

  1. 修复它的第一种方法:将UIToolbar添加到故事板视图中,添加设置栏按钮项,将条形按钮项的动作与VC中的功能连接,实现此功能进行导航。
  2. 修复它的第二种方法:保留UIToolbar的子类(如果只在子类中添加条形按钮项,则不是首选),为设置栏按钮项声明公共属性,使用targetaction将VC设置为VC的目标和功能作为设置栏按钮项的操作,实现此功能进行导航。