質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

解決済

Swift  別のViewControllerのメソッドを呼びたい

hrk_sgymm1193
hrk_sgymm1193

総合スコア1

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1回答

0評価

0クリップ

461閲覧

投稿2021/12/24 17:54

ボタンが押された時に他のViewControllerでメソッドを呼びたい。

Swift

import UIKit import RealityKit import ARKit class ViewController: UIViewController, UIGestureRecognizerDelegate, ObjcDelegate { let button = UIButton() let button2 = UIButton() private var arView: ARView! override func viewDidLoad() { super.viewDidLoad() arView = ARView(frame: view.bounds) view.addSubview(arView) UISetUp() } func Pressed() { print("aaaaaaa") let anchor = AnchorEntity() anchor.position = simd_make_float3(0, -0.5, -1) if let usdzModel = try? Entity.load(named: "teapot"){ anchor.addChild(usdzModel) usdzModel.generateCollisionShapes(recursive: true) } arView.scene.anchors.append(anchor) let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer( target: self, action: #selector(ViewController.onTap(_:)) ) tapGesture.delegate = self self.view.addGestureRecognizer(tapGesture) } 省略

Swift

import UIKit protocol ObjcDelegate: class{ func Pressed() } class ButtonViewController: UIViewController { weak var delegate: ObjcDelegate? let submit = UIButton() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .gray UISetUp() } @objc func sub(_ sender: UIButton){ print("tap!") delegate?.Pressed() } }

https://swiswiswift.com/2017-07-08/

上記の記事を参考にプロトコルを作成し、デリゲートを介して呼び出そうとしましたが呼び出せません。

具体的にはモーダル上でボタンが押されるとsubの関数が発火しプロトコルのPressed呼ばれ違うviewでオブジェクトが生成されるというものを実装したいです。

Swiftにお詳しい方ご教授お願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

hoshi-takanori

2021/12/24 18:35

目的の ViewController が現在の ViewController とどういう関係にあるのか (前の画面か、これから呼び出す画面か、など) によってやり方は変わります。
hrk_sgymm1193

2021/12/25 02:30

1つ目のコードが最初のViewControllerで、2つ目のコードが1つ目のViewContollerからボタンで呼ばれたモーダル画面になります。今回実現したい事として、2つ目のViewControllerのボタンを押すと1つ目のViewContollerのPressedメソッドが呼ばれるということを行いたいです。どうかご教授お願いいたします。
hoshi-takanori

2021/12/25 12:59

モーダル遷移するコードが貼られてないので確かなことは言えませんが、ButtonViewController を生成して present する際に buttonVC.delegate = self みたいに書けばいいはず。 あと、Pressed で self.view に addGestureRecognizer するのってどうなんだろう…。(何をしたいかにもよりますが、普通は viewDidLoad で arView に addGestureRecognizer しておくのでは…。)
hrk_sgymm1193

2021/12/26 03:51

presentする際にvcを生成してdelegate=selfをすることで実現することができました。pressedの中身については少し見直してみます。ご丁寧に解説いただき、ありがとうございました!

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています