【发布时间】:2016-12-11 16:35:11
【问题描述】:
如何将子视图的属性访问到视图控制器。
示例:如果我有一个@IBOutlet 弱变量 loginBtn:UIButton!我怎样才能访问我的视图控制器?我做了很多关于如何做到这一点的事情和教程,但我仍然没有设法让它发挥作用。
而且我也很困惑加载 xib 的最佳方式是什么?我在教程中看到了很多方法,但我也想知道他们在生产应用程序中是如何做到的。
protocol UserLoginDelegate {
func userDidLogin(status: Bool, message: String)
}
@IBDesignable class LoginWidget: UIView {
var loginDelegate: UserLoginDelegate?
var loginView: UIView!
var nibName: String = "LoginWidget"
let defaults = NSUserDefaults.standardUserDefaults()
@IBOutlet weak var loginButton: UIButton!
@IBOutlet weak var email: UITextField!
@IBOutlet weak var password: UITextField!
@IBOutlet weak var name: UITextField!
@IBAction func loginBtn(sender: AnyObject) {
// init
override init(frame: CGRect) {
super.init(frame: frame)
// set anything that uses the view or visible bounds
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// setup
setup()
}
func setup() {
loginView = loadViewFromNib()
loginView.frame = bounds
loginView.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
addSubview(loginView)
}
func loadViewFromNib() -> UIView {
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: nibName, bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
return view
}
}
控制器
class AuthenticationViewController: UIViewController, UserLoginDelegate {
override func viewDidLoad() {
super.viewDidLoad()
loginWidget = LoginWidget(frame: CGRect(x: 0, y: 171, width: 375, height: 247))
authenticationSegment.setEnabled(true, forSegmentAtIndex: 0)
loginWidget.loginDelegate = self
self.view.addSubview(loginWidget)
// Do any additional setup after loading the view.
}
}
【问题讨论】:
-
一个不相关的问题太多了。
标签: swift uiview uiviewcontroller xib