2016-05-05 4 views
1

Я смотрел на учебник Брайан Voong на https://youtu.be/hexuJ6qL06I?t=1678View Controller и само

Существует эта часть кода с этой линией header.viewController = само.

У меня возникли трудности с пониманием этой конкретной строки. Есть ли кто-нибудь, кто мог бы объяснить, что подразумевается под заголовком header.viewController = self? Является ли это тем, что для включения viewController в заголовок, но что это значит? Был бы признателен, если бы кто-нибудь мог дать мне какое-то объяснение. Мне даже сложно найти эту информацию, используя Google. Я просто не знаю, какие ключевые слова использовать для поиска.

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 

} 

ответ

1

header является объектом отдельного класса (TaskHeader), который имеет дополнительное свойство viewController. И когда пользователь нажимает кнопку «Добавить», он вызывает метод на TaskHeader класс addTask (headerView), который в конце вызывает метод viewController.addNewTask.

Таким образом, он сохраняет это, поэтому мы можем легко получить ссылку на viewController, с помощью которой он может вызывать метод класса viewController класса Taskheader. Вы можете посмотреть класс 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 = "" 
    } 

} 
+0

Thx! Теперь это намного лучше. Теперь я понял, что здесь задействованы 2 класса: TaskHeader и CollectionView. Существует такой недостаток в обучении Youtube. Иногда их объяснения могут быть слишком краткими. –

1
header.viewContoller = self 

«ViewController» это просто свойство заголовка, а код делает этот указатель собственности на себя, сам является регулятор тока.

Затем в заголовке, вы можете использовать:

self.viewController.view.backgroundColor = UIColor.orangeColor 

И на фоне текущего контроллера будет изменен.