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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

0回答

1186閲覧

[Swift] Navigationbarの画面遷移後のボタン表示がグレーアウトさせない方法

KATATSU

総合スコア17

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

1クリップ

投稿2019/03/10 08:56

編集2019/03/14 13:43

初めまして。
Swift初心者です。初歩的な質問かもしれませんがよろしくお願いいたします。

#前提
・NvigationController内のNavigationbarで画面遷移を管理しています。
・Navigationbar上に「次へ」「戻る」の二種類が基本的に配置されており、ユーザーはいつでも前の画面に戻ることが可能です。
画面①から「次へ」ボタンを押下後、画面②に遷移し、その後画面②の「戻る」ボタンを押下すると画面①の「次へ」ボタンがグレーアウトしています。
ボタンのEnabledはtrueのままのようで、グレーアウトした「次へ」を押下すれば画面②に遷移可能です。
おそらく、「戻る」を押下して②→①に遷移した際に画面①の「次へ」ボタンのalpha値が半分ほどになっているのではないかと思います。

#課題
・Navigationbarの仕様なのか、不明ですが、勝手にグレーアウトするのをやめたいです。
・常にalpha=1.0とする方法も考えましたが、画面①では、所定の操作を完了するまで「次へ」ボタンのEnabled = bool となります。

よろしくお願いいたします。

対象コード

import UIKit ///////<summary> ///////頭痛の色を決めるページ class HeadacheMake021: UIViewController { @IBOutlet weak var headMake021View: HeadacheMakeTextView! @IBOutlet weak var colorEditNib: ColorEdit! @IBOutlet weak var headacheSideNib: HeadacheSide! var isFirst = true // 最初の処理かどうか var headMakeNo021 : String! = ""//ページ番号 var headMakeText021 : String! = ""//ページ説明テキスト //var headacheImgF011 : UIImageView! //タップ操作で配置されるimage変数 背面用 var headacheImgS021 : UIImageView! //タップ操作で配置されるimage変数 側面用 var defaultSImg = UIImage(named:"headacheBase01.jpg") //var headacheImgSize: CGSize! // ////////////////////////////////////////////////////////////////////// var headacheFPos :CGPoint!//配置場所を配置したheadachePointに対する座標に変換する変数 var headacheFPosratio: CGFloat! //配置場所の比率計算用変数 headacheFrontNibの縦方向のサイズを格納 var headacheImgFHeigt: CGFloat! //配置場所の比率計算用変数 headacheFrontNibの縦方向のサイズを格納 var headacheImgFSize: CGSize! // //var headacheImgKind: UIImageView! //配置したUIImageの種類を格納 var headacheImgFKind: String! var headacheSPos :CGPoint!//配置場所を配置したheadachePointに対する座標に変換する変数 var headacheSPosratio: CGFloat! //配置場所の比率計算用変数 headacheFrontNibの縦方向のサイズを格納 var headacheImgSHeigt: CGFloat! //配置場所の比率計算用変数 headacheFrontNibの縦方向のサイズを格納 var headacheImgSSize: CGSize! // //var headacheImgKind: UIImageView! //配置したUIImageの種類を格納 var headacheImgSKind: String! ////////////////////////////////////////////////////////////////////// override func viewDidLoad() { super.viewDidLoad() headMakeNo021 = "2" headMakeText021 = "あなたの頭痛は\n何色をしていますか?" headMake021View.headMakeNo.text = headMakeNo021 headMake021View.headMakeText.text = headMakeText021 headacheImgS021 = UIImageView(frame: CGRect(x: -300, y: -300, width: 30, height: 30)) headacheImgS021.frame.size = headacheImgSSize headacheImgS021.image = defaultSImg headacheImgS021.tintColor = UIColor(red: 131/255 , green: 173/255 , blue: 196/255 , alpha: 1.0) headacheImgS021.image = headacheImgS021.image?.withRenderingMode(.alwaysTemplate) self.colorEditNib.colorEditDelegate = self if (headacheSPos != nil ){ print("DEBUG_PRINT: if文内配置") self.headacheSideNib.baseView012.addSubview(headacheImgS021) } } override func viewDidAppear(_ animiated: Bool){ if isFirst { isFirst = false headacheSPosratio = headacheSideNib.baseView012.frame.height / headacheImgSHeigt headacheImgS021.frame.size = CGSize(width: headacheImgS021.frame.size.width * headacheSPosratio, height: headacheImgS021.frame.size.height * headacheSPosratio) headacheSPos = CGPoint(x:headacheSPos.x * headacheSPosratio, y:headacheSPos.y * headacheSPosratio) } headacheImgS021.center = headacheSPos } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { print("DEBUG_PRINT: seguepreoare021→031") // segueから遷移先のHeadacheMake031を取得する let headacheMake031:HeadacheMake031 = segue.destination as! HeadacheMake031 headacheMake031.color031 = headacheImgS021.tintColor // 遷移先のHeadacheMake012で宣言している各変数に頭痛の配置座標・比率計算用のサイズ・配置している場所を代入して渡す headacheMake031.headacheFPos = headacheFPos//座標 headacheMake031.headacheImgFHeigt = headacheImgFHeigt //比率計算用高さ headacheMake031.headacheImgFSize = headacheImgFSize headacheMake031.headacheImgFKind = headacheImgFKind //種類 headacheMake031.headacheSPos = headacheSPos//座標 headacheMake031.headacheImgSHeigt = headacheSideNib.baseView012.frame.height //比率計算用高さ headacheMake031.headacheImgSSize = headacheSideNib.baseView012.frame.size headacheMake031.headacheImgSKind = headacheImgSKind //種類 } } extension HeadacheMake021: ColorEditDelegate { func changeImageViewColor(color: UIColor) { headacheImgS021.tintColor = color } }

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

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

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

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

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

takabosoft

2019/03/11 02:57

状況がよくわかりませんが、UINavigationControllerではなくUINavigationBarを単体で使っているんでしょうかね? 再現する単純なコードを載せてもらえれば回避策を提示できるかもしれませんが・・・ (あと、Xcode7ではなくXcode10でないと、最近は審査に出せませんよ?)
KATATSU

2019/03/11 14:26

回答ありがとうございます。 ・UINavigationControllerで使用しています。 >Xcode7ではなくXcode10でないと、最近は審査に出せませんよ? →そのような情報はどこに掲示されているのでしょうか?  噂程度は聞いていたのですが、3月までは大丈夫だと聞いて急いで作成していました。  xcode9で作成してるのですがxcode9のタグが見つからず7でタグ付けしてしまいました…
fuzzball

2019/03/12 09:13

>>xcode9で作成してるのですがxcode9のタグが見つからず7でタグ付けしてしまいました… Xcode7タグだと事実と違いますよね。なぜXcodeタグを選ばなかったのでしょうか? 修正して下さいね。(Swift2タグも消して下さい)
fuzzball

2019/03/14 09:26

回答を求める前に質問を修正してはどうでしょうか?
KATATSU

2019/03/14 14:08

プログラミング業界の知識が浅く、不適切な操作をしていたようで申し訳ありません。 タグの件、修正させていただきました。
takabosoft

2019/03/15 08:25

> ・常にalpha=1.0とする方法も考えましたが、画面①では、所定の操作を完了するまで「次へ」ボタンのEnabled = bool となります。 とありますが、「Enabled = bool」ってなんでしょう?また、alphaをプログラム等からいじっている箇所が存在するのですか?
fuzzball

2019/03/15 09:31

「戻る」「次へ」はどのような実装になっているのでしょう? 「戻る」は標準のもの、「次へ」はrightBarButtonItemでしょうか?
KATATSU

2019/03/16 04:28

>「Enabled = bool」ってなんでしょう? →「次へ」ボタンを操作不可状態にしているという意味で記載させていただいています。  所定の操作が完了したら、Enabled=trueにして「次へ」ボタンを押下して画面遷移が可能な状態にしています。 >alphaをプログラム等からいじっている箇所が存在するのですか? →いじっている箇所は存在しません。  仕様なのか不明なのですが、「次へ」を押下して次の画面に遷移した後、「戻る」を押下してもとの画面に戻った際に「次へ」ボタンがグレーアウト(=alpha値が変更している?)しています。  ※操作は可能な状態です。
KATATSU

2019/03/16 04:34

>「戻る」「次へ」はどのような実装になっているのでしょう? 「戻る」は標準(NavigationControllerで次の画面を作成した際に自動で追加されるもの)です。 「次へ」はBarButtonItemで作成しています。※rightかleftかは不明ですが右側に追加して使用しています。
fuzzball

2019/03/18 00:29 編集

viewDidAppear(_:)の頭に super.viewDidAppear(animated) を追加するとどうなりますか?(これ必要ですので結果に関わらず追加しておいて下さい)
takabosoft

2019/03/18 00:44

だとしたら次へボタンのenabledを変えているソースを全部載せてもらわないと判らないかと思います。 (対象コードは画面②ですか?であれば画面①のソースにenabledを変えているソースがあるのでは?)
fuzzball

2019/03/18 08:58

あぁ、isEnabledをいじってるんですね。なんでアルファがどうとかって話になるんでしょうかね‥。
KATATSU

2019/03/21 06:09

>takabosoft様 >fuzzball様 画面①です。画面①のソースにenabledに変えているものがあります。 たくさんお聞きした後で、大変恐縮なのですが、macのOSを10.14に更新し、クリーンナップした後に起動すると、本質問のグレーアウトしてしまう挙動がなくなっておりました。 何が原因でなぜなくなったのかは不明です。 丁寧なご対応ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問