표시된 팝업 컨트롤러의 셀을 누른 후 셀 텍스트를 매개 변수로 리셋

팝업 버튼 표시 정보


이번에는 UIPopoverPresentationController를 사용합니다.
원래 UIPresentation Controller를 준비했는데 아이폰으로 표시가 안 되는 등
업데이트된 클래스는 UIPopoverPresentationController입니다.
그래서 이번에는 UIPopover Presentation Controller를 이용하려고 합니다.
또한 팝업 메뉴에 TableView를 표시하고 해당 항목의 String(텍스트)을
리셋을 목표로 하다.

클래스 구성 정보


팝업 메뉴의 클래스 표시
표시된 테이블 뷰 클래스
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
    }

}

표시된 테이블 뷰 클래스

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)
    }
}

좋은 웹페이지 즐겨찾기