IOSでストーリーボードを使用するときにデフォルトタブを設定する方法を教えてください。これを達成する方法がわからないようです。
ありがとうございました
次の2つの方法のいずれかを使用できます。
tabBar.items = tabBarItems;
tabBar.selectedItem = [tabBarItems objectAtIndex:0];
またはオブジェクトからの直接メソッド
[tabBar setSelectedItem:myUITabBarItem];
または、これらを組み合わせてこれを行うことができます。
tabBar.items = tabBarItems;
[tabBar setSelectedItem:[tabBarItems objectAtIndex:0]];
しかし、私はまだその方法をテストしていません、これが役立つことを願っています!
他の回答と同じようにプログラムで初期選択タブを設定できますが、コードに触れることなくストーリーボードで同じことを実現するには、次を実行します。
これは、上記のステップを達成したときにどのように見えるかです。
UITabBarController
をサブクラス化するのはやり過ぎのように思えるかもしれませんが、最もクリーンなソリューションを提供すると思います。
BaseTabBarController.Swift
を作成@IBInspectable
を追加して、viewDidLoad
に設定します。
class BaseTabBarController: UITabBarController {
@IBInspectable var defaultIndex: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
selectedIndex = defaultIndex
}
}
ストーリーボードで、UITabBarController
を新しいサブクラスに設定します。
UITabBarController
の新しいファイルサブクラスを作成します。viewDidLoad
の最後にこれを追加してください:
self.selectedIndex = 1;
この新しいファイルを、ストーリーボードのUITabBarController
のカスタムクラスとして設定します。
できました。
次のコードは私のために働いた:
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
tabBarController.selectedIndex = 2;
appdelegateでapplicationDidBecomeActive
関数を見つけ、この行を追加します
let tabBarController = self.window?.rootViewController as! UITabBarController
tabBarController.selectedIndex = 0 // any index you want
TabBarController
のviewDidLoad()
で、selectedIndex
を任意の値に設定します。 (0
が最初で、3
は4番目などです)
これはXcode 8以降で実現できます(テストしたばかりで、このバージョンより前に入手可能かどうかわかりません)
@ジョシュア・フィンチが言ったように手順を実行しますが、
私のバリアントは、デフォルトの選択されたコントローラーを変更するだけで、カスタマイズする必要がない場合に適しています。以下を追加するだけですcategory:
// UITabBarController+DefaultPage.h
#import <UIKit/UIKit.h>
@interface UITabBarController(DefaultPage)
@end
// UITabBarController+DefaultPage.m
#import "UITabBarController+DefaultPage.h"
@implementation UITabBarController(DefaultPage)
- (void)viewDidLoad {
[super viewDidLoad];
self.selectedIndex = 1;
}
@end
p.s:@ joshua-finch answer が好きです
Aviel Grossの答えに基づいて、UITabBarControllerではなく、UITabBarにこれを実装したかっただけです。これは次のように実行できます。
class BaseTabBar: UITabBar {
@IBInspectable var defaultIndex: Int = 0 {
didSet {
self.selectedItem = self.items?[defaultIndex]
}
}
}
たとえば、UITabBarControllerに移動している場合。ログイン画面では、選択をそこに設定するのが最も簡単です:
let tabs = self.storyboard?.instantiateViewController(withIdentifier: "tabs") as! UITabBarController
tabs.selectedIndex = 1
self.present(tabs, animated:false)
InterfaceBuilderで、すべてのセグエを切断し、表示したい順序で再接続します。