Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 视图控制器和自我_Ios_Swift_Viewcontroller_Self - Fatal编程技术网

Ios 视图控制器和自我

Ios 视图控制器和自我,ios,swift,viewcontroller,self,Ios,Swift,Viewcontroller,Self,我在看Brian Voong在 这部分代码的标题是这样的。viewController=self 我很难理解这一行。有人能解释header.viewController=self是什么意思吗?它是否用于将viewController放入标题中,但这意味着什么?如果有人能给我解释一下,我将不胜感激。我甚至很难用谷歌找到这些信息。我只是不知道用什么关键字来搜索 override func collectionView(collectionView: UICollectionView, viewFo

我在看Brian Voong在

这部分代码的标题是这样的。viewController=self

我很难理解这一行。有人能解释header.viewController=self是什么意思吗?它是否用于将viewController放入标题中,但这意味着什么?如果有人能给我解释一下,我将不胜感激。我甚至很难用谷歌找到这些信息。我只是不知道用什么关键字来搜索

override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {

    let header = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "headerId", forIndexPath: indexPath) as! TaskHeader

    header.viewContoller = self

    return header

}

header
是一个单独类(TaskHeader)的对象,它有一个可选属性
viewController
。当用户点击header的Add按钮时,它会调用
TaskHeader
addTask
(headerView)上的一个方法,该方法最后会调用viewController.addNewTask方法

所以他保留了这个,这样我们就可以很容易地得到viewController引用,通过它他可以从Taskheader类调用viewController类上的方法。您可以查看TaskHeader类以了解其工作原理

class TaskHeader: BaseCell {

    var viewController: ViewController?

    let taskNameTextField: UITextField = {
        let textField = UITextField()
        textField.placeholder = "Enter Task Name"
        textField.translatesAutoresizingMaskIntoConstraints = false
        textField.borderStyle = .RoundedRect
        return textField
    }()

    let addTaskButton: UIButton = {
        let button = UIButton(type: .System)
        button.setTitle("Add Task", forState: .Normal)
        button.translatesAutoresizingMaskIntoConstraints = false
        return button
    }()

    override func setupViews() {

        addSubview(taskNameTextField)
        addSubview(addTaskButton)

        addTaskButton.addTarget(self, action: "addTask", forControlEvents: .TouchUpInside)

        addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-8-[v0]-[v1(80)]-8-|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": taskNameTextField, "v1": addTaskButton]))

        addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-24-[v0]-24-|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": taskNameTextField]))
        addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-8-[v0]-8-|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": addTaskButton]))
    }

    func addTask() {
        viewController?.addNewTask(taskNameTextField.text!)
        taskNameTextField.text = ""
    }

}
“viewController”只是header的一个属性,代码使该属性指向self,self是当前控制器

然后在标题中,您可以使用:

self.viewController.view.backgroundColor = UIColor.orangeColor

并且当前控制器的背景将会改变。

Thx!现在好多了。现在我可以看到这里涉及到两个类,TaskHeader和collectionView。从Youtube学习有一个缺点。有时他们的解释可能过于简短。
self.viewController.view.backgroundColor = UIColor.orangeColor