Создание UITabBarController с использованием NIB вне AppDelegate? - PullRequest
3 голосов
/ 24 января 2012

Все еще новичок в программировании на iOS, и, несмотря на обилие исследований, я столкнулся с другим препятствием.

То, что я хочу реализовать:

Я хочуUITabBarController, который загружается при переходе от основного интерфейса.Я также хотел бы использовать NIB для определения его свойств.

Все примеры, которые я могу найти, помещают UITabBarController в AppDelegate, но я не хотел бы загружать его, пока он не будет использован.Я также не знаю, будут ли все UIGestureRecognizer оставаться активными, если я просто сделаю это модально (я не могу получить рабочую реализацию).

Что у меня есть

Сначала я загружаю начальный вид загрузки из AppDelegate

AppDelegate.h

@class InitialViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UIViewController *viewController;

@end

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[InitialViewController alloc] initWithNibName:@"InitialViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}

С этой точки зрения, поскольку я просто создаю каркас пользовательского интерфейса, у меня есть две кнопки, одна из которых предназначена для основного интерфейса, а другая - для UITabBarController..

InitialViewController.h

@interface InitialViewController : UIViewController
- (IBAction)toMain:(id)sender;
- (IBAction)toTabs:(id)sender;

@property (strong, nonatomic) UIViewController *mviewController;
@property (strong, nonatomic) UIViewController *tviewController;
@end

InitialViewController.m

- (IBAction)toMain:(id)sender {

self.mviewController = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
[[[UIApplication sharedApplication] delegate] window].rootViewController = self.mviewController;

}

- (IBAction)toTabs:(id)sender {
self.tviewController = [[tabViewController alloc] initWithNibName:@"tabViewController" bundle:nil];

[[[UIApplication sharedApplication] delegate] window].rootViewController = self.tviewController;

}

При загрузке MainViewController он ведет себя так, как я хочу.Но когда я загружаю вид вкладок, я получаю одну длинную вкладку внизу и черный фон.Я могу добавить в viewdidload такие вещи, как изменение цвета фона, но нет реальных вкладок или представлений, связанных с вкладками в XIB.

Я подозреваю, что мне чего-то не хватает в двух областях: на вкладке .h и некоторых ссылках, связанных с этим в конструкторе интерфейса.Или недостаточно установить новый rootViewController.

tabBarController.h

#import <UIKit/UIKit.h>

@interface iPodViewController : UITabBarController <UITabBarControllerDelegate>
@end

Если кто-то может указать мне правильное направление и / илиПокажите мне реализацию, которая работает, я был бы очень признателен.

- как примечание, когда я захожу в tabbar.xib и использую редактор помощника, он открывает InitialViewController.h -

1 Ответ

3 голосов
/ 26 февраля 2012

В отличие от других контроллеров представления (например, UITableViewController), вы не должны создавать подкласс UITabViewController.Следовательно, в отличие от других контроллеров представления, вы не создаете подкласс, а затем делаете свой подкласс владельцем пера, указывая на представление в пике с настраиваемым представлением.

Вместо этого для любого класса, который выхотите владеть вашим UITabBarController, добавьте простой, ванильный UITabBarController в качестве свойства розетки для этого класса.(например, делегат приложения).

Затем создайте файл пера и перетащите объект UITabBarController в перо.Установите владельцем пера тот класс, которому вы хотите владеть своим контроллером панели вкладок (например, делегатом приложения), и подключите розетку, которую вы создали как свойство, к контроллеру панели вкладок в пате.

@interface myTabOwningClass

    @property (strong, nonatomic) IBOutlet UITabBarController myTabBarControllerOutlet;

Теперь в точке, где вы хотите создать и отобразить контроллер панели вкладок, используйте следующий метод:

[[NSBundle mainBundle] loadNibNamed:@"MyTabControllerNib" owner:myTabOwningClass options:nil];

Это инициализирует свойство (например, myTabBarControllerOutlet в нашем классе) и загружаетКонтроллер панели вкладок из кончика, включая все контроллеры подвидов для каждой вкладки и т. д., которые вы определили в кончике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...