2016-05-05 7 views
1

私はこのラインheader.viewController =自己とのコードのこの部分があり https://youtu.be/hexuJ6qL06I?t=1678ビューコントローラと自己

でブライアンVoongによってチュートリアルを見ていました。

ここでこの特定の行を理解するのは難しいです。 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オプションのプロパティviewControllerを有する別のクラス(TaskHeader)の目的です。ユーザーがヘッダーのAddボタンをタップすると、TaskHeaderクラスaddTask(headerView)のメソッドが呼び出され、最後にviewController.addNewTaskメソッドが呼び出されます。

彼はこれを保持しているので、viewheaderクラスからviewControllerクラスのメソッドを呼び出すことができる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 = "" 
    } 

} 
+0

Thx!今これははるかに良いです。ここでは、TaskHeaderとcollectionViewの2つのクラスが含まれていることがわかりました。 Youtubeから学ぶことには、この欠点があります。時には彼らの説明があまりにも簡単かもしれません。 –

1
header.viewContoller = self 

'のViewControllerはただヘッダの特性であり、コードは、自己が現在のコントローラであり、自己このプロパティポインタを行います。

は、その後、あなたのヘッダーには、使用することができます:

self.viewController.view.backgroundColor = UIColor.orangeColor 

そして、現在のコントローラの背景が変更されます。