• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:NavigationControllerの不具合?)

NavigationControllerの不具合?

このQ&Aのポイント
  • NavigationControllerを使用している際の不具合について
  • NavigationControllerのボタンが動かせなくなる現象について
  • NavigationControllerのボタンが画面下部のタブに隠れる問題について

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

> NavigationControllerをInitialViewControllerに設定、その下にViewControllerをpush接続し、 念のため確認ですが、ここは「ViewControllerをpush接続」ではなく、 「ViewControllerをRelationshipのroot viewとして接続」の誤りだと 思ってよいでしょうか? NavigationControllerには、少なくともrootViewControllerを設定しないと 機能できないと思うのですが、もしかして、それは別途やっていて、 それに加えてpush接続もあるということなのでしょうか?(だとしたら余計に 意味がわかりません)。 > ちなみに、TabBarControllerも使っています。 これも確認したいのですが、NavigationControllerをInitialViewControllerに した上で、NavigationController配下にTabBarControllerコントローラーが 配置されているのですか? そのTabBarControllerはどのViewControllerから呼び出されるのでしょうか? > NavigationControllerと並列で、さらにNavigationControllerを使用しています。 最初に「NavigationControllerをInitialViewControllerに設定」と書いてあるのに ここでは、TabBarController配下に並列で複数のNavigationControllerがあるかのように 見えます。InitialViewControllerに設定したものとは別に複数のNavigationController がTabBarController配下にあるのでしょうか? それとも最初の説明とは別のものを説明しているのでしょうか? このあたりの接続状況をもっとちゃんと説明してもらえると何かわかるかも しれません。 で、結局構成がよくわからないのですが、なんとなくNavigationControllerの Attributes Inspectorで「Shows Toolbar」が意図せずチェックONになっている ような気がしました。 ただ、そのボタンを削除しようとしても削除できないというのは理由がよくわかりません。 選択したように見えて選択されてないという話はないのでしょうか? もし「Shows Toolbar」がONになっていたなら、それをOFFにすればToolBarは 消えるかもしれませんが、そのToolBarに張り付いていたボタンは画面上 見えないところで残っている可能性があります。 その場合でもStoryboardの左側に部品をツリー上に表示している「Document Outline」 には見えているはずなので、そこで部品を選択して削除すればよいと思います。

ifonesapp
質問者

お礼

回答ありがとうございます! すみません、言葉の認識が甘く、間違っていて分かりづらい書き方になってしまいました。 回答を参考に触っていた所、問題が解決できたました。 まず構成の訂正から ViewControllerをRelationshipのroot viewとして接続というのが正しかったです。 そしてinitialViewControllerはTabBarControllerでした。 [TabBarController]-[NavigationController]-[ViewController]-[Viewcontroller]-... という感じで接続されています。 Show Toolbarは確認したところチェックされていませんでした。 症状としては 一度上部のセルに乗せたボタンが固定化され、StoryBoard上で名前の編集はできるものの、移動したり削除したりという事ができない また、移動できた場合も、ViewControllerの下部に固定化されてしまい、同様の現象が起こる(質問に添付した画像のような状態) という感じでした。 これはボタンがBarBottonItemという所に勝手に格納?されてしまっていたようです。 Document Outlineからボタンを選択しても削除やカットができなかったのですが、そのBarBottonItemという項目ごとであれば、削除・カットすることが出来ました。 バグがあったりエラーが起こるようなら、コードでボタンを追加すればいいかなと思いましたが、segue移動をコードで書くと見にくくなるなと感じたり http://dev.classmethod.jp/smartphone/iphone/ios_unwind-segue/ のようなExitの機能も使いたいと思っていたので助かりました^^ 特にバグという事も無かったようなので良かったです。

その他の回答 (1)

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.2

> これはボタンがBarBottonItemという所に勝手に格納?されてしまっていたようです。 > Document Outlineからボタンを選択しても削除やカットができなかったのですが、そのBarBottonItemという項目ごとであれば、削除・カットすることが出来ました。 ここらへんは、ちょっと認識に誤りがあります。 UIButtonと、UIBarButtonItemは、別のクラスであることを、まず覚えてください。View上に配置するものをUIButton、Navigation Bar、Tool Barに配置するものを、UIBarButtonItemといいます。外見がおなじなので、区別できなかったのも無理ありませんが、Storyboardにおいては、Object Libraryの下のほうにスクロールしていくと、部品として用意されていますので、ご自身の目でおたしかめください。そして今後は、Navigation BarやTool Barには、UIButtonではなく、UIBarButtonItemを配置してください。 話はもうすこし続きます。 しかし、あなたは、Storyboardで、UIButtonをNavigation Barの上にドラッグして、じっさいに配置できました。私のいっていることは違いますね?どういうことでしょう? UIBarButtonItemのクラスリファレンスを読んでください。プロパティ「customView」が見つかります。このcustomViewを使うと、ボタン以外の、いろんなコントロールが、Navigation Bar、Tool Barに配置できます。たとえば、Navigation BarにUIActivityIndicatorViewを配置して、処理中であることを知らせるのは、よくあるインターフェイスですね。 Storyboardでなく、プログラムでNavigation BarにUIActivityIndicatorViewを直接配置することができません。いったんUIBarButtonItemをNavigation Barに配置してから、UIBarButtonItemのプロパティcustomViewにUIActivityIndicatorViewを代入することで、可能になります。 このようなプログラムのUIの構造を理解すれば、Storyboardの挙動も理解できると思います。ButtonがUIBarButtonItemごとでないと、削除できないのも、納得がいくのではないでしょうか? すくなくとも、UIBarButtonItemのcustomViewにUIButtonを配置するのは、むだではありますね。

ifonesapp
質問者

お礼

回答ありがとうございます!お礼が遅くなり申し訳ありません。 NavigationBarにはそれ用のボタンがあるのですね。全く知りませんでした; リファレンスは英語が読めず、あまり理解できません。。。 虎の巻というところを、参考にしています。 しかしcustomViewというのがいまいち検索をしてもそれらしい物がヒットせず、理解できませんでした。 UIActivityIndicatorViewは特にタップ処理の無い物だと思いますが、そういうものでもUIBarButtonItemを使って設置するんですね 本来は >いったんUIBarButtonItemをNavigation Barに配置してから、UIBarButtonItemのプロパティcustomViewにUIActivityIndicatorViewを代入することで、可能になります。 といった処理をしないといけないのに、それを飛ばしてしまっているからバグのような挙動になってしまうという事でしょうか? Buttonとして使いたいのであれば、UIBarButtonItemをそのまま使い、 Button以外のコントロールを実装したい場合は、UIBarButtonItemのcustomViewプロパティに何らかの処理を加える事で可能になる。 万が一UIBarButtonItemに出来なくてButtonなら出来る処理(あるのか分かりませんが)があった場合は、UIBarButtonItemのcustomViewにButtonを配置すれば良い という考えで良いのでしょうか? NavigationBarにUIActivityIndicatorViewを設置してみようと試してみたのですが >UIBarButtonItemのプロパティcustomViewにUIActivityIndicatorViewを代入することで、可能になります。 ここら辺の、特にcustomViewプロパティの使い方がわからず、出来ませんでした; いずれ実装する機会は必ずあるので、customViewの使い方も習得しておきたいですね。 まだ完璧には理解できていませんが、理解度は進みました! NavigationBar上のボタンを全てBarButtonItemに変えてみましたが、今のところButtonを設置した時のようなおかしい?動きは見られなくなりました^^

関連するQ&A