Как создать DetailViewController для UISplitViewController? - PullRequest
0 голосов
/ 04 октября 2010

Я разработал программу для iPad программно.У меня есть SplitViewController, RootViewController и DetailViewController.
Я могу получить UITableViewController в качестве всплывающего окна.
Как получить отображение UILabel на DetailViewController при нажатии каждого индекса UITableViewController программно?Заранее спасибо ..

Ответы [ 2 ]

0 голосов
/ 21 января 2012

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

Как уже упоминалось@Wes, шаблон, предоставленный в XCode для «Master-Detail Application», создает полезную отправную точку для создания универсального приложения с контроллером представления:

XCode 4.2 Диалог нового проекта enter image description here

также обязательно выберите Universal ..

enter image description here

Однако я обнаружил, что, по сути, не было очевидным,что при использовании приложения в качестве приложения для iPhone вы получите вызов метода setDetailItem: в detailViewController (который, в свою очередь, вызовет configureView), этого не произойдет автоматически в версии приложения для iPad,это связано с тем, что значение параметра _detailViewController ivar (сопоставленное свойством detailViewController) в masterViewController по умолчанию равно nil.

Это связано с тем, что в версии для iPhone при выборе элемента сведений код по умолчанию проверяет, равен ли этот iVar значению ноль, и автоматически создает его для вас.однако в версии для iPad [appDelegate application: didFinishLaunchingWithOptions:] уже создал для вас один detailViewController вместе с masterViewController.чтобы это работало в моем коде, я добавил следующие строки в методе [appDelegate application: didFinishLaunchingWithOptions:] следующим образом:

    masterViewController.detailViewController = detailViewController;

    [masterViewController tableView:masterViewController.tableView 
            didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];

Вторая строка автоматически выбирает первый элемент сведений для вас при запуске приложения.Это безопасно в демонстрационном коде по умолчанию, потому что он настроен на обработку 1 детали.если вы собираетесь изменить это в своем коде (например, путем динамического создания элементов детализации из какого-либо другого источника), вам, конечно, необходимо убедиться, что в позиции 0 есть действительный элемент детализации, который можно выбрать в позиции 0.

Метод (после того, как я добавил эти 2 строки) теперь выглядит следующим образом:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController_iPhone" bundle:nil] autorelease];
        self.navigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease];
        self.window.rootViewController = self.navigationController;
    } else {
        MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController_iPad" bundle:nil] autorelease];
        UINavigationController *masterNavigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease];

        DetailViewController *detailViewController = [[[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil] autorelease];
        UINavigationController *detailNavigationController = [[[UINavigationController alloc] initWithRootViewController:detailViewController] autorelease];

        masterViewController.detailViewController = detailViewController;

        [masterViewController tableView:masterViewController.tableView 
                didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];


        self.splitViewController = [[[UISplitViewController alloc] init] autorelease];
        self.splitViewController.delegate = detailViewController;
        self.splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil];

        self.window.rootViewController = self.splitViewController;
    }
    [self.window makeKeyAndVisible];
    return YES;
}

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

0 голосов
/ 02 августа 2011

Шаблон, который Apple предоставляет для вас в XCode, делает именно то, что вы ищете.

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