Xcode 4.2 с вкладками приложения Heriarcy - PullRequest
0 голосов
/ 25 октября 2011

Я немного читал, я пытаюсь понять, как создать правильную иерархию представления для моего приложения.Я создал базовое приложение с вкладками в xcode 4.2 с использованием arc, но это новое приложение не включает mainwindow.xib, поэтому многие учебники, использующие IB, для меня бесполезны.У меня уже есть приложение с 5 вкладками, и «база» приложения работает, как и ожидалось.Что мне нужно, так это включить больше представлений в определенное окно с вкладками, которое просматривается в данный момент.Моя иерархия проста, как показано ниже.Мои предположения дополнены вопросительными знаками, так как у меня есть только 5 базовых категорий, все в настоящее время UIViewControllers внутри tabBarController

App heriarchy (предлагается)

Home (Currently UIViewController using homeViewController, convert to UINavigationController?)
    Add (UIViewController with HomeAdd.xib?)
    Edit (UIViewController with HomeEdit.xib
    delete  (UIViewController with HomeDelete.xib?)

ViewList - Single page to view list (Currently UIViewController using viewListViewController)

Share - Single page to send emails / invites (Currently UIViewController using shareViewController)

Friends (UINavigationController with root view of FriendsRoot.xib?)
    Add (UIViewController with FriendsAdd.xib?)
    Edit (UIViewController with FriendsEdit.xib?)
    delete  (UIViewController with FriendsDelete.xib?)

Settings - Single page for app settings/preferences (Currently UIViewController using settingsViewController)

Я даже не уверен, если вышевозможна иерархия (т. е. смешивание контроллеров представления внутри tabBarController), и она хотела бы получить информацию о том, как выполнить это программным путем, поскольку это, по-видимому, мой единственный вариант в делегате приложения, поскольку по умолчанию отсутствует файл mainwondiw.h / m / xib.

Мой текущий код для этого в моем делегате приложения выглядит следующим образом:

AppDelegate.h

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) UITabBarController *tabBarController;

@end

AppDelegate.m

@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 *homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
    UIViewController *viewListViewController = [[ViewListViewController alloc] initWithNibName:@"ViewListViewController" bundle:nil];
    UIViewController *shareViewController = [[ShareViewController alloc] initWithNibName:@"ShareViewController" bundle:nil];
    UIViewController *friendsViewController = [[FriendsViewController alloc] initWithNibName:@"FriendsViewController" bundle:nil];
    UIViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];
    self.tabBarController = [[UITabBarController alloc] init];
    [self.tabBarController setDelegate:self];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:homeViewController, viewListViewController, shareViewController, friendsViewController, settingsViewController, nil];
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

IЯ попытался сделать несколько попыток внедрить UINavigationControllers или альтернативные представления с пользовательскими кнопками, но, похоже, все они приводят к неудачной сборке, так как я все еще изучаю контекст и код.

Любые советы будут приветствоваться.До сих пор я имел ограниченный успех с моими предыдущими постами.

Спасибо,

Серебряный тигр

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Home (В настоящее время UIViewController, использующий homeViewController, преобразовать в UINavigationController?) Вы можете использовать uiviewcontroller для дома

для указанных ниже 3 вы можете использовать контроллер вида модели или можете добавлять отдельные виды.

Добавить (UIViewController с HomeAdd.xib?) Редактировать (UIViewController с HomeEdit.xib удалить (UIViewController с HomeDelete.xib?)

такой же случай для друзей также ..

я не уверен, почемуВы не нашли mainwindow.xib ..

0 голосов
/ 16 ноября 2011

Плохая новость заключается в том, что, поскольку в новом приложении с вкладками по умолчанию нет «MainWindow.xib», вы не можете следовать многим учебным пособиям онлайн. Хорошей новостью является то, что это все еще очень легко реализовать.

В вашем файле AppDelegate.m в

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

метод (где вы настраиваете контроллеры представления вашего tabBarController, вам нужно фактически добавить ViewControllers типа "UINavigationController" вместо типа "UIViewController" (вам нужно создать эти файлы).

Например (ради аббревиатуры я только показал свое последнее объявление UINavigationController),

UINavigationController *nodes = [[NodeNavigationController alloc] initWithNibName:@"NodeNavigationController" bundle:nil];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:modems, nodes, home,viewController1, viewController2, nil];

Наконец, в методе init вашего UINavigationController (или аналогичного)

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

вам нужно добавить это ...

Nodes *viewController = [[Nodes alloc] initWithNibName:@"Nodes" bundle:[NSBundle mainBundle]];
    self.viewControllers = [NSArray arrayWithObjects:viewController, nil];

Теперь в viewController «Узлы» вы можете использовать обычный материал «[... pushViewController: ...]», который вы всегда использовали.

пример ...

[self.navigationController pushViewController:viewController animated:YES];

Надеюсь, это было полезно.

...