将变量赋给@IBOutlet UIView

时间:2014-08-21 20:51:00

标签: ios swift interface-builder

是否可以将变量设置为IBOutlet? 我有一个按钮,我想将视图显示为下拉列表。如果用户拥有帐户或是访客,则下拉列表会有所不同。我希望能做到以下几点:

class HomeViewController: UIViewController {
  @IBOutlet weak var profileMenu: UIView!
  @IBOutlet weak var guestMenu: UIView!

  var currentMenu: UIView = self.profileMenu

  override func viewDidLoad() {
    super.viewDidLoad()
    if(user.registered){
      currentMenu = self.profileMenu
    } else {
      currentMenu = self.guestMenu
    }
  }

  // toggle visibility on the currentMenu UIView
  @IBAction func didClickProfileButton(sender: AnyObject) {
    currentMenu.hidden = !currentMenu.hidden
  }

1 个答案:

答案 0 :(得分:1)

此处的问题与@IBOutletUIView无关。问题是如何设置成员变量的默认值。

这不起作用:

var profileMenu: UIView!
var currentMenu: UIView = self.profileMenu

您不能将self作为默认值引用,尤其是当其他成员变量尚未分配时!

相反,为什么不让currentMenu成为一个解包的可选项,只需将其分配到viewDidLoad

var currentMenu: UIView!

override func viewDidLoad() {
  super.viewDidLoad()
  if(user.registered){
    currentMenu = self.profileMenu
  } else {
    currentMenu = self.guestMenu
  }
}

这应该有效,因为viewDidLoad将始终被调用,if/else确保它始终分配两个值中的一个。