Ios 构建Swift UIView和UIViewController的正确方法是什么?
UIViewController是否只管理显示的UIView?或者它也被用来控制其中的内容 例如,现在我的UIViewController中有一段代码,它可以通过单击按钮从一个视图切换到下一个视图,如下所示:Ios 构建Swift UIView和UIViewController的正确方法是什么?,ios,swift,Ios,Swift,UIViewController是否只管理显示的UIView?或者它也被用来控制其中的内容 例如,现在我的UIViewController中有一段代码,它可以通过单击按钮从一个视图切换到下一个视图,如下所示: class TTViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() super.view.addBackground()
class TTViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
super.view.addBackground()
}
//other code
@IBAction func OpenUserSelectView(sender: AnyObject) {
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: "PlayerSelectView", bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
super.view.addSubview(view)
}
}
class PlayerSelectView :UIScrollView {
let viewWidth = CGFloat(300)
let viewHeight = CGFloat(500)
var addPlayerButton :TTBlueButton?
var cancel :TTBlueButton?
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let screenSize: CGRect = UIScreen.mainScreen().bounds
self.frame = CGRectMake((screenSize.width/2) - (viewWidth/2), (screenSize.height/2) - (viewHeight/2), viewWidth, viewHeight)
styleView()
addAddPlayerButton()
self.contentSize = CGSizeMake(viewWidth, viewHeight-100)
self.userInteractionEnabled = true
}
func styleView() {
super.layer.cornerRadius = 8.0
super.layer.shadowColor = UIColor.blackColor().CGColor
super.layer.shadowOpacity = 0.2
super.layer.shadowRadius = 4.0
super.layer.shadowOffset = CGSizeMake(0.0, 5.0)
}
func addAddPlayerButton(){
addPlayerButton = TTBlueButton(frame: CGRectMake(10, 10, viewWidth-20, 40))
addPlayerButton!.setTitle("Add New Player", forState: UIControlState.Normal)
addPlayerButton!.layer.cornerRadius = 5.0
addPlayerButton!.userInteractionEnabled = true
addPlayerButton!.addTarget(self, action: #selector(PlayerSelectView.addPlayer(_:)), forControlEvents: UIControlEvents.TouchUpInside)
self.addSubview(addPlayerButton!)
}
func addCancelButton(){
addPlayerButton = TTBlueButton(frame: CGRectMake(10, 10, viewWidth-20, 40))
addPlayerButton!.setTitle("Cancel", forState: UIControlState.Normal)
addPlayerButton!.layer.cornerRadius = 5.0
addPlayerButton!.userInteractionEnabled = true
addPlayerButton!.addTarget(self, action: #selector(PlayerSelectView.addPlayer(_:)), forControlEvents: UIControlEvents.TouchUpInside)
self.addSubview(addPlayerButton!)
}
@IBAction func addPlayer(sender: AnyObject) {
if addPlayerButton?.currentTitle != "Create Player" {
let addPlayerTextField = TextField(frame: CGRect(x: 10, y: 10, width: viewWidth - 20, height: 40))
let border = CALayer()
let width = CGFloat(2.0)
addPlayerButton!.setTitle("Create Player", forState: UIControlState.Normal)
border.borderColor = UIColor.darkGrayColor().CGColor
border.frame = CGRect(x: 0, y: 0, width: addPlayerTextField.frame.size.width, height: addPlayerTextField.frame.size.height)
border.borderWidth = width
border.cornerRadius = 5
addPlayerTextField.layer.addSublayer(border)
addPlayerTextField.layer.masksToBounds = true
self.addSubview(addPlayerTextField)
addPlayerButton?.frame.origin = CGPoint(x: 10, y: 60)
} else {
}
}
}
但我也有一些UIView,它们可以创建按钮,为这些按钮执行操作,以及其他类似的操作:
class TTViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
super.view.addBackground()
}
//other code
@IBAction func OpenUserSelectView(sender: AnyObject) {
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: "PlayerSelectView", bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
super.view.addSubview(view)
}
}
class PlayerSelectView :UIScrollView {
let viewWidth = CGFloat(300)
let viewHeight = CGFloat(500)
var addPlayerButton :TTBlueButton?
var cancel :TTBlueButton?
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let screenSize: CGRect = UIScreen.mainScreen().bounds
self.frame = CGRectMake((screenSize.width/2) - (viewWidth/2), (screenSize.height/2) - (viewHeight/2), viewWidth, viewHeight)
styleView()
addAddPlayerButton()
self.contentSize = CGSizeMake(viewWidth, viewHeight-100)
self.userInteractionEnabled = true
}
func styleView() {
super.layer.cornerRadius = 8.0
super.layer.shadowColor = UIColor.blackColor().CGColor
super.layer.shadowOpacity = 0.2
super.layer.shadowRadius = 4.0
super.layer.shadowOffset = CGSizeMake(0.0, 5.0)
}
func addAddPlayerButton(){
addPlayerButton = TTBlueButton(frame: CGRectMake(10, 10, viewWidth-20, 40))
addPlayerButton!.setTitle("Add New Player", forState: UIControlState.Normal)
addPlayerButton!.layer.cornerRadius = 5.0
addPlayerButton!.userInteractionEnabled = true
addPlayerButton!.addTarget(self, action: #selector(PlayerSelectView.addPlayer(_:)), forControlEvents: UIControlEvents.TouchUpInside)
self.addSubview(addPlayerButton!)
}
func addCancelButton(){
addPlayerButton = TTBlueButton(frame: CGRectMake(10, 10, viewWidth-20, 40))
addPlayerButton!.setTitle("Cancel", forState: UIControlState.Normal)
addPlayerButton!.layer.cornerRadius = 5.0
addPlayerButton!.userInteractionEnabled = true
addPlayerButton!.addTarget(self, action: #selector(PlayerSelectView.addPlayer(_:)), forControlEvents: UIControlEvents.TouchUpInside)
self.addSubview(addPlayerButton!)
}
@IBAction func addPlayer(sender: AnyObject) {
if addPlayerButton?.currentTitle != "Create Player" {
let addPlayerTextField = TextField(frame: CGRect(x: 10, y: 10, width: viewWidth - 20, height: 40))
let border = CALayer()
let width = CGFloat(2.0)
addPlayerButton!.setTitle("Create Player", forState: UIControlState.Normal)
border.borderColor = UIColor.darkGrayColor().CGColor
border.frame = CGRect(x: 0, y: 0, width: addPlayerTextField.frame.size.width, height: addPlayerTextField.frame.size.height)
border.borderWidth = width
border.cornerRadius = 5
addPlayerTextField.layer.addSublayer(border)
addPlayerTextField.layer.masksToBounds = true
self.addSubview(addPlayerTextField)
addPlayerButton?.frame.origin = CGPoint(x: 10, y: 60)
} else {
}
}
}
我做这件事的方式让人感觉不对,所以我想知道我的怀疑是否正确,或者这是一种可以接受的方式 您可以做任何您喜欢的事情,但在我看来,视图出现的代码配置进入控制器(例如视图控制器-注意名称) 您不必在一个视图控制器中完成所有操作—您可以嵌套视图控制器—但您显示的是控制器代码,并且(在我看来)应该在视图控制器中 顾名思义,视图控制器管理一组视图,并且 类UIViewController的实例。他们的工作是管理 诸如视图大小调整、布局、对与 查看、处理动作或触摸等事件,并与 数据模型,甚至其他视图控制器 您需要使用navigation controller研究视图导航。因为在上面的代码中,您正在将视图添加到uiviewcontroller的视图中,而且代码也存在一些内存泄漏
制作一个或多个子视图控制器,并在该视图控制器上执行任何您想要的操作。之后,当您单击父视图控制器上的按钮时,使用uinavigationcontroller推送您的子视图控制器。模型视图控制器。仅显示一个视图。控制器控制-包括控制视图的显示。那么定制UIView有什么目的呢?里面会有什么样的代码?我有另一个UI视图,它利用drawRect函数在视图上放置正方形,那么这是一个合适的用法吗?我觉得应该保留在UIView中的另一个例子是styleView函数和init(减去AddPlayerButton函数)中的任何内容。