Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 构建Swift UIView和UIViewController的正确方法是什么?_Ios_Swift - Fatal编程技术网

Ios 构建Swift UIView和UIViewController的正确方法是什么?

Ios 构建Swift UIView和UIViewController的正确方法是什么?,ios,swift,Ios,Swift,UIViewController是否只管理显示的UIView?或者它也被用来控制其中的内容 例如,现在我的UIViewController中有一段代码,它可以通过单击按钮从一个视图切换到下一个视图,如下所示: class TTViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() super.view.addBackground()

UIViewController是否只管理显示的UIView?或者它也被用来控制其中的内容

例如,现在我的UIViewController中有一段代码,它可以通过单击按钮从一个视图切换到下一个视图,如下所示:

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函数)中的任何内容。