#ios #uinavigationcontroller #uitabbarcontroller
#iOS #uinavigationcontroller #uitabbarcontroller
Вопрос:
Я создаю приложение, основанное на панели вкладок. На одной из вкладок будет отображаться табличный вид, и я хотел бы иметь панель навигации вверху.
Однако мне нужно локализовать все в этом приложении на нескольких языках, поэтому это нужно сделать в коде.
У меня есть панель вкладок, настроенная в AppDelegate;
@implementation AppDelegate
@synthesize window = _window;
@synthesize tabBarController = _tabBarController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
UIViewController *viewController1 = [[HomeViewController alloc] initWithNibName:@"HomeView" bundle:nil];
UIViewController *viewController2 = [[RecycleViewController alloc] initWithNibName:@"RecycleView" bundle:nil];
UIViewController *viewController3 = [[SettingsViewController alloc] initWithNibName:@"SettingsView" bundle:nil];
UIViewController *viewController4 = [[SettingsViewController alloc] initWithNibName:@"SettingsView" bundle:nil];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2,viewController3, viewController4, nil];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
В каждом из окон есть код для информации на вкладке.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.title = NSLocalizedString(@"Home", @"Home");
self.tabBarItem.image = [UIImage imageNamed:@"home"];
}
return self;
}
Пока все хорошо, но для RecyclingView (TableView) нужна панель навигации, где я могу задать заголовок с помощью NSLocalizedString.
Я был бы очень благодарен за некоторую помощь.
Ответ №1:
вам нужно добавить UINavigationController
во второй индекс вашего tabBarController
viewControllers
вместо добавления контроллера представления —
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
UIViewController *viewController1 = [[HomeViewController alloc] initWithNibName:@"HomeView" bundle:nil];
UIViewController *viewController2 = [[RecycleViewController alloc] initWithNibName:@"RecycleView" bundle:nil];
UIViewController *viewController3 = [[SettingsViewController alloc] initWithNibName:@"SettingsView" bundle:nil];
UIViewController *viewController4 = [[SettingsViewController alloc] initWithNibName:@"SettingsView" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController2];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, navController,viewController3, viewController4, nil];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
чтобы задать заголовок на панели навигации, вы можете написать это в своем RecycleViewController
viewDidLoad
[self.navigationItem setTitle:@"title"];
Ответ №2:
Вы можете локализовать xibs с помощью Interface Builder, поэтому вам не нужно делать это программно.
http://www.icanlocalize.com/site/tutorials/iphone-applications-localization-guide/
Ответ №3:
Ответ для xcode 4.3.2 таков:
выделите UINavigationBar в RecycleViewController.m следующим образом:
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self];
self.view addSubview:navController.view;
Но есть ошибка, из-за которой панель навигации будет отображаться пустой вверху, около 10 пикселей.
Итак, вот другое решение: используйте xib builder, добавьте панель навигации из библиотеки в верхней части view RecycleViewController.xib, нажмите ctrl «Элемент навигации», укажите на RecycleViewController.h, чтобы вставить IBOutlet, тогда у вас будет хорошо выглядящая панель навигации для отображения.