2012-04-10 8 views
3

私のアプリは5つのタブを持つタブバーコントローラーで始まります。最初は名前が表示されていますが、他の4つはクリックするまで名前がありません。ユーザーの言語に応じて名前が表示されます。 タブバーが表示される前にタブの名前を設定するにはどうすればよいですか? 私はストーリーボードを使用しています。残りのすべてがストーリーボードで完了したときにタブバーにタイトルをプログラムで設定する方法はありますか?私はAppDelegateのようなものを試しました[FirstViewController setTitle:NSLocalizedString(@"Titel1", nil)]; セレクタsetTitleのクラスメソッドがないというエラーが出ました。おかげさまで タブバー表示する前の商品タイトルストーリーボード

答えて

12

私は今日同じ問題を抱えていました。私はストーリーボードも使用しています。私の場合、私は次のように使いました。

  1. 私は「UITabBarController」のサブクラスとして名前 「MainTabBarViewController」と新しい「のObjective-Cクラス」を作成しました。
  2. 「アイデンティティ・インスペクタ」の私のストーリーボードで、「カスタム・クラス」を「MainTabBarViewController」に変更しました。 "MainTabBarViewController" の方法 "のviewDidLoad" で

  3. iが追加さ:

    [[self.viewControllers objectAtIndex:0]のsetTitle:NSLocalizedString(@ "ホーム"、ゼロ)]。

    [[self.viewControllers objectAtIndex:1] setTitle:NSLocalizedString(@ "statistics"、nil)];

    [[self.viewControllers objectAtIndex:2] setTitle:NSLocalizedString(@ "settings"、nil)];

    [[self.viewControllers objectAtIndex:3] setTitle:NSLocalizedString(@ "info"、nil)];

私はそれが完璧な方法ではないと思いますが、私にとっては完璧に動作します。

+1

こんにちは...私はその考えが好きです。 – halloway4b

+0

私はそれを信じることができない!私はこのソリューションを長く探してきました。ありがとうございます:) – thedp

+0

私の解決策を参照してください、それはインデックスとタイトルを設定する必要はありません。 –

1

ビューコントローラを作成しているアプリのデリゲートでは、ここでは(というviewDidLoadに比べて)、表題のプロパティを設定し、例えば:

vc1 = [[VC1 alloc] init]; 
vc1.title = @"List"; 

vc2 = [[VC2 alloc] init]; 
vc2.title = @"Map"; 

tabBarController.viewControllers = [[NSArray alloc] initWithObjects:vc1, vc2, nil]; 
+0

私はストーリーボードを使用しています。だから私はストーリーボードでそれらを作成しました。ストーリーボードでこれを行う別の方法はありますか? – halloway4b

+0

私はストーリーボードを使用していないので私は知らない。 –

+0

ok ...ありがとう.... – halloway4b

0

あなたはXcodeのが作成したFirstViewControllerを見ている場合

if (self) { 
    //check your language 
    self.title = NSLocalizedString(@"First", @"First"); 
    self.tabBarItem.image = [UIImage imageNamed:@"first"]; 
} 

だから、あなたの言語をチェックしてからtitleプロパティを設定する必要があり、これは目が設定されます:あなたはこのような何かを見ることができます- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil法に基づくテンプレートタブバーのアプリケーションを使用してeタイトルをタブバーとナビゲーションバーに表示します。

+0

私はストーリーボードにタブバービューコントローラーを持っています。提示されるときに、ユーザーが自分のiPhoneで設定した言語に応じて、すべてのタブバータイトルを表示します。 – halloway4b

0

これはあなたが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]; 
を追加するには、このコードを書くあなたのアプリデリゲートクラスで

-(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; 
} 

最初のビューであると仮定し

すべてのビューでuは、このメソッドを使用する必要があり、これを試してみてください

上記のコードを

に追加します。
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {} 
+0

これはストーリーボードと円弧で使えますか? – halloway4b

+0

退屈な話は分かりませんが、それは他のプロジェクトで挑戦的に働くでしょう – freelancer

2

私はこのような二つのタブで設定持っていた:私は(この場合ContactsNavigationControllerで)私のUITabBarControllerのビューコントローラのカスタムクラスでinitWithCoder:セレクタをオーバーライドし、初期化ストーリーボードとARCとの構成で

MainTabBarController : UITabBarController 
    +- MessagesNavigationController : UINavigationController 
    +- ContactsNavigationController : UINavigationController 

をこのようなそこtabBarItem.title

@implementation ContactsNavigationController 

... 

- (id)initWithCoder:(NSCoder *)decoder 
{ 
    self = [super initWithCoder:decoder]; 
    if (self) { 
     self.tabBarItem.title = NSLocalizedString(@"Contacts", nil); 
    } 
    return self; 
} 

のiOSが(id)initWithCoder:代わりの-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil呼び出し、ストーリーボードを使用して、ストーリーボードビューコントロールlerはUITabBarControllerの起動中に初期化されます。 viewDidLoadは、タブバーからビューコントローラタブが選択されるまで呼び出されません。

関連する問題