@mogeko6347

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Delegateのエラー

Swift初心者です。
Xcodeでポップアップを表示する機能を付けたいと思っているのですが、検索して出てきたサイトにあったコードをコピペしたところ、

let vc = storyboard.instantiateViewController(withIdentifier: "popoverVC") as! PopoverViewController
vc.delegate = self

の部分で、
Value of type 'PopoverViewController' has no member 'delegate'
といったエラーが出てしまいました。
サイトにあった手順は全て踏んだのですが、これはどこがおかしいのでしょうか...。
教えていただければ幸いです。

該当するソースコード

override func prepare (for segue: UIStoryboardSegue, sender: Any?) {
        let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        // "popoverVC"はポップアップ用のVCに後ほど設定
        let vc = storyboard.instantiateViewController(withIdentifier: "popoverVC") as! PopoverViewController
        vc.delegate = self

        vc.modalPresentationStyle = UIModalPresentationStyle.popover

        let popover: UIPopoverPresentationController = vc.popoverPresentationController!
        popover.delegate = self

        if sender != nil {
            if let button = sender {
                // UIButtonからポップアップが出るように設定
                popover.sourceRect = (button as! UIButton).bounds
                popover.sourceView = (sender as! UIView)
            }
        }
        self.present(vc, animated: true, completion:nil)
    }

    // 表示スタイルの設定
    func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
        // .noneを設定することで、設定したサイズでポップアップされる
        return .none
    }
0 likes

1Answer

Value of type 'PopoverViewController' has no member 'delegate' は日本語だとどういう意味になると思いますか?

0Like

Comments

  1. @mogeko6347

    Questioner

    PopoverViewControllerクラスにdelegateメソッドが存在しない、と言う意味でしょうか?
  2. そうですね。エラーの通り、存在しないメソッド(あるいはプロパティ)は呼び出せませんから、あらかじめクラスに定義しておく必要があります。
  3. @mogeko6347

    Questioner

    返信が遅くなりすみません。
    いろいろ試してみたのですが、どうも「メソッドをクラスに定義する」と言う操作がうまくつかめません。初歩的な質問で申し訳ないですが、どういったコードを書けばいいのでしょうか...
  4. @mogeko6347

    Questioner

    返信ありがとうございます。PopoverViewControllerの方で一度適当なプロトコルを宣言して、ViewControllerのクラス名の横に設定したプロトコルの名前を記述したところ、エラーは発生せずビルドできました。
    でもこれ、特に値を渡したいわけではないのでわざわざdelegateメソッドを用意する必要はないですよね...。実際、vc.delegate = self の記述を消したらビルドできましたし。でも今回の質問でデリゲートとプロトコルについて理解を深めることができたと思います。
    ありがとうございましたm(_ _)m

Your answer might help someone💌