私のアプリは、5つのタブがあるタブバーコントローラーから始まります。最初は最初の1つに名前が表示されますが、他の4つはクリックするまで名前がありません。次に、ユーザーが使用している言語に応じて名前が表示されます。タブバーが表示される前にタブの名前を設定するにはどうすればよいですか?ストーリーボードを使用しています。残りのすべてがストーリーボードで行われるときに、プログラムでタブバーにタイトルを設定する方法はありますか?AppDelegateで次のように試しましたが、セレクターsetTitle[FirstViewController setTitle:NSLocalizedString(@"Titel1", nil)];
のクラスメソッドがないというエラーが発生しました。ありがとう。
5 に答える
今日も同じ問題がありました。絵コンテも使っています。私の場合、次のように使用しました。
- 「UITabBarController」のサブクラスとして「MainTabBarViewController」という名前の新しい「Objective-Cクラス」を作成しました。
「IDインスペクター」のストーリーボードで、「カスタムクラス」を「MainTabBarViewController」に変更しました。
「MainTabBarViewController」のメソッド「viewDidLoad」に次を追加しました。
[[self.viewControllers objectAtIndex:0] setTitle:NSLocalizedString(@ "home"、nil)];
[[self.viewControllers objectAtIndex:1] setTitle:NSLocalizedString(@ "statistics"、nil)];
[[self.viewControllers objectAtIndex:2] setTitle:NSLocalizedString(@ "settings"、nil)];
[[self.viewControllers objectAtIndex:3] setTitle:NSLocalizedString(@ "info"、nil)];
私はそれが完璧な方法ではないと思いますが、私にとっては完璧に機能します。
私はこのような2つのタブを持つ構成を持っていました:
MainTabBarController : UITabBarController
+- MessagesNavigationController : UINavigationController
+- ContactsNavigationController : UINavigationController
StoryboardとARCを使用した構成でinitWithCoder:
は、UITabBarControllerビューコントローラー(この場合)のカスタムクラスのセレクターをオーバーライドし、次のようContactsNavigationController
に初期化しました。tabBarItem.title
@implementation ContactsNavigationController
...
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super initWithCoder:decoder];
if (self) {
self.tabBarItem.title = NSLocalizedString(@"Contacts", nil);
}
return self;
}
ストーリーボードを使用する場合、UITabBarControllerの起動中にストーリーボードビューコントローラーが初期化されるときでは(id)initWithCoder:
なく、iOSが呼び出します。-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
またviewDidLoad
、タブバーからViewControllerタブが選択されるまで呼び出されないことに注意してください。
ビューコントローラを作成しているアプリデリゲートで、ここで(ではなくviewDidLoad
)titleプロパティを設定します。次に例を示します。
vc1 = [[VC1 alloc] init];
vc1.title = @"List";
vc2 = [[VC2 alloc] init];
vc2.title = @"Map";
tabBarController.viewControllers = [[NSArray alloc] initWithObjects:vc1, vc2, nil];
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
メソッドに基づいたテンプレートTab-Barアプリケーションを使用してXcodeによって作成されたFirstViewControllerを見ると、次のようになります。
if (self) {
//check your language
self.title = NSLocalizedString(@"First", @"First");
self.tabBarItem.image = [UIImage imageNamed:@"first"];
}
したがって、言語を確認してからtitle
プロパティを設定する必要があります。これにより、タブバーとナビゲーションバーにタイトルが設定されます。
これを試してください、すべてのビューでuはこの方法を使用する必要があります
これがあなたの最初のビューだとしましょう
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.title = NSLocalizedString(@"homepage", @"homepage");
[self.tabBarItem setTag:0];
self.tabBarItem.image = [UIImage imageNamed:@"homepage"];
}
return self;
}
アプリデリゲートクラスにこのコードを記述して追加しますUITabBarController
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2,viewController3,viewController4,viewController5, nil];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
上記のコードをに追加します
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {}