表示したポップオーバー（UIPopoverPresentationController）内のセルを押下したらセルのテキストを引数としてコールバックさせる


#ポップオーバーの表示について
今回は**UIPopoverPresentationController**を採用します。
UIPresentationControllerが元々用意されておりましたが、iPhoneで表示出来ないなど
制約があり、リニューアルされたクラスがUIPopoverPresentationControllerです。

なので今回は**UIPopoverPresentationController**を利用してみようと思います。

また、ポップオーバーでTableViewを表示し、その中のString（テキスト）を
コールバックさせる事を目標とします。

![Simulator Screen Shot - iPhone 11 - 2020-01-02 at 06.31.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551622/da1cd0a3-4855-dbea-a017-f21e1b730e94.png)
###クラス構成について
・ポップオーバーを表示させるクラス
・表示されるTableViewクラス

TableViewクラスにクロージャを渡して、
`func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {`時にクロージャを呼び出します。

##ポップオーバーを表示させるクラス

```:objective-c
import UIKit

class LoginViewController: UIViewController,UIPopoverPresentationControllerDelegate {

    ///UserIdを入力するtextField
    @IBOutlet weak var UserIdTextField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    ///押下時にポップオーバーを表示させる。
    @IBAction func tappedPopover(_ sender: UIButton) {
        let viewController = TableViewController() //popoverで表示するViewController
        viewController.modalPresentationStyle = .popover
        viewController.preferredContentSize = CGSize(width: 200, height: 44*3)
        let presentationController = viewController.popoverPresentationController
        presentationController?.delegate = self
        presentationController?.permittedArrowDirections = .up
        presentationController?.sourceView = sender
        presentationController?.sourceRect = sender.bounds
        
        viewController.closure = { (string) in
          print("string")
        }
        
        
        present(viewController, animated: true, completion: nil)
    }
    
    
    func adaptivePresentationStyle(for controller: UIPresentationController,
                                   traitCollection: UITraitCollection) -> UIModalPresentationStyle {
        return .none
    }

}
```

##表示されるTableViewクラス

```
import UIKit

class TableViewController: UITableViewController {
    //元クラスから受け渡されるクロージャ
    //コールバックしたい時に本クロージャを呼び出す
    var closure: ((String)->Void)? = nil

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return 3
    }

    //挿入したいデータ(TableViewCell)を1行ずつ生成する
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCell(withIdentifier: "Cell")
        if cell == nil {
            cell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "Cell")
        }
        cell?.textLabel?.text = "aaa"
        return cell!
    }
    
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let cell = tableView.cellForRow(at: indexPath)
        let cellString = cell?.textLabel?.text
        closure?(cellString!)
        self.dismiss(animated: false, completion: nil)
    }
}
```