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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

3390閲覧

ボタンが反応せず困っております。

motchan

総合スコア7

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2018/04/01 12:38

ボタンが反応せず困っております。

こんにちは。
Storyboardを使わないでなのですが、RootViewControllerにFirstViewControllerを
ペアレントしてFirstViewControllerのボタンを押したらSecondViewControllerに
遷移すると言うことをしたいのですが、ボタンが反応せず困っております。
お手数ですが、ご教授願えませんでしょうか?
よろしくお願いいたします。

発生している問題・エラーメッセージ

ボタンを押しても何も反応しない。

該当のソースコード

swift4

1 2 AppDelegate 3 4 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 5 self.window = UIWindow(frame: UIScreen.main.bounds) 6 self.window?.rootViewController = RootViewController() 7 self.window?.makeKeyAndVisible() 8 return true 9 } 10 11 RootViewController 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 let launchViewController: UIViewController = FirstViewController() 16 self.view.addSubview(launchViewController.view) 17 launchViewController.didMove(toParentViewController: self) 18 launchViewController.view.frame = UIScreen.main.bounds 19 self.view.addSubview(launchViewController.view) 20 launchViewController.didMove(toParentViewController: self) 21 } 22 23 func goSecondViewController() { 24 let nextViewController: UIViewController = SecondViewController() 25 let childViewController: UIViewController = self.childViewControllers.first! 26 childViewController.willMove(toParentViewController: nil) 27 childViewController.view.removeFromSuperview() 28 childViewController.removeFromParentViewController() 29 self.addChildViewController(nextViewController) 30 nextViewController.view.frame = UIScreen.main.bounds 31 self.view.addSubview(nextViewController.view) 32 nextViewController.didMove(toParentViewController: self) 33 } 34 35FirstViewController 36 37 @objc func pressButton(_ button: UIButton) { 38 let parentViewController = self.parent as! RootViewController 39 parentViewController.goSecondViewController() 40 } 41 42 override func viewDidLoad() { 43 super.viewDidLoad() 44 self.view.backgroundColor = UIColor.blue 45 let button = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100)) 46 button.backgroundColor = .gray 47 button.tag = 0 48 button.addTarget(self, action: #selector(FirstViewController.pressButton(_:)), for: .touchUpInside) 49 self.view.addSubview(button) 50 51 }

試したこと

FirstViewControllerのpressButtonの中身をviewWillAppearに書くと遷移できているので、ボタンが反応すれば解決かと思い思考錯誤しましたが、お手上げでした。

補足情報(FW/ツールのバージョンなど)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

下記を追加したらいかがでしょうか?私の環境ではボタンのアクションが呼ばれるようになりました。

// RootViewController viewDidLoadの中 let launchViewController: UIViewController = FirstViewController() // ↓下記を追加 addChildViewController(launchViewController)

投稿2018/04/01 21:27

newmt

総合スコア1277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

motchan

2018/04/02 10:34

無事ボタンが反応するようになりました。ご教授いただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問