web-dev-qa-db-ja.com

タブバーコントローラーのアイコンとテキストを保持しながらストーリーボード参照を使用する

コードを管理しやすくするためにプロジェクトの1つをリファクタリングし始めましたが、タブバーコントローラーはどのタブが何を表すかというアイコンを失いました。これがないと、どのタブが並べ替えの目的であるかが少しわかりません。

ストーリーボード参照を使用しているときにタブバーコントローラーのアイコンを再び表示するにはどうすればよいですか?

添付の画像を参照してください。最初の3つのタブは「空白」ですが、リファクタリングしていない他のタブはアイコンとタイトルで表示されていることに注意してください。

ストーリーボードの参照に慣れていない人のために、私はここのチュートリアルに従っていました: http://code.tutsplus.com/tutorials/ios-9-staying-organized-with-storyboard-references--cms-24226

enter image description here

アイコンが正しく設定されていることを示すタスクストーリーボードのサンプル

enter image description here

15
Joseph Astrahan

まず、タブバーコントローラーがあるストーリーボードに、参照されているストーリーボードのシーンがあるはずです。

タブが関連付けられているシーンをクリックし、下部のタブバーをクリックしてから、属性インスペクターに移動するだけで、新しいアイコンを割り当てることができます。 enter image description here

8
VeganKid

あなたが経験したアプローチを変えることなく私のために働いた別の解決策のようです:

  • ストーリーボードの参照はそのままにしておきます enter image description here
    • 参照されているストーリーボードの初期ビューコントローラーに移動します
    • シーンにタブバーアイテムを追加 enter image description here
    • UITabBarControllerストーリーボードで行ったように構成します enter image description here
    • クリーン&ラン enter image description here
    • すべてに対して繰り返しますストーリーボード参照

ハッピーコーディング!

16
Meseery

Update-このアプローチはXcode9では機能しなくなったようです。

タブを正しく表示する方法は次のとおりです。

  1. タブに埋め込まれる最初のUIViewControllerをUITabViewControllerと同じストーリーボードに配置します。 enter image description here
  2. Ctrl +タブバーコントローラーからコンテンツビューコントローラーにドラッグして、通常どおり接続します。これにより、UITabBarItemがコンテンツビューコントローラーの下部に自動的に追加されます。 enter image description here
  3. コンテンツビューコントローラを選択します。
  4. [エディター]メニューをクリックして、[ストーリーボードにリファクタリング]を選択します... enter image description here

  5. UITabBarControllerタブは、新しいストーリーボード参照を指すようになります... enter image description here

  6. ...そしてコンテンツビューコントローラはタブバーの関係からUITabBarItemを保持します。これでアプリに正常に表示されます。 enter image description here
3
Drew C

奇妙な理由で、IBのリファレンスビューコントローラーにタブバーが表示されませんでした。それを選択してドキュメントのアウトラインを展開しているときに、ビューリストに表示されました。私はそれを通して自分の変更を加えることができました。

Document outline view

enter image description here

お役に立てれば! :)

1
Sharukh Mastan

シーンの前にナビゲーションコントローラーを埋め込むと、通常どおりに編集できます。

次に、ストーリーボードの参照を選択します。

上部に移動し、[エディター]> [埋め込み]> [ナビゲーションコントローラー]をクリックします

ナビゲーションコントローラーとリンクストーリーボードリファレンスが組み込まれたタブバーコントローラー

0
Tanner Morse

XCode 11.1:次のアプローチでは、実行時に表示する目的のタブタイトルとアイコンを取得します。

  1. 目的のストーリーボードへのストーリーボード参照を作成します(外部フレームワークにある場合は正しいバンドル識別子を含みます)。
  2. Ctrlキーを押しながらタブバーコントローラーから作成した参照にドラッグし、表示されるコンテキストメニューから[Relationship Segue> viewcontrollers]を選択します。
  3. タブバーの横に「アイテム」というタイトルの正方形の画像が表示されます。このアイテムをクリックしてドラッグし、必要に応じてバーに再配置します。
  4. ターゲットビューコントローラー(参照されるストーリーボードの最初のレスポンダーである必要があります)で、タブバーアイテムを作成し、プロパティパネルの[バーアイテム]セクションでTitleおよびImageプロパティを設定します。

この時点で、正しいタイトルが実行時に表示されます(ただし、ストーリーボードエディターでのコンパイル時には表示されません)。アイコンもそこにあるなら、素晴らしい。そうでない場合は、画像参照が有効であり、タブバーアイテムと同じモジュールにある(つまり、同じフレームワークにある)ことを確認してみてください。それでも表示されない場合は、次のようなハックの回避策が機能します。

  1. UITabBarControllerから継承する新しいクラスを作成します。
  2. viewWillLayoutSubviewsを次のようにオーバーライドします。

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
    
        // Set the tab bar image at runtime
        if let exampleTab = tabBar.items?.first(where: { $0.title == "ExampleTitle" }) {
            // To insert an image literal, type "Image" and select Image Literal
            // from the autocomplete menu. An icon should appear.
            // Double-click the icon and select the desired image from the grid.
            exampleTab.image = Image Literal
        }
    }
    
  3. タブバーコントローラーのタイプを、作成したサブクラスに変更します(ストーリーボードエディターの[ID]パネルから)。

最後に、タブバーアイテムが実行時に正しく表示されるはずです。外部フレームワークのストーリーボードのコンパイル時に(ストーリーボードエディターで)正しく表示する方法を誰かが知っている場合は、私に知らせてください。

0
Extragorey