iPad UISplitViewController несколько корневых представлений - PullRequest
3 голосов
/ 28 сентября 2010

Я занимаюсь разработкой для iPad и создал стандартное приложение UISplitViewController, используя шаблон, предоставленный в XCode - стандартный UITableView слева и подробный вид справа.

Я изменил шаблон так, чтобы припользователь выбирает ячейку таблицы в левом представлении, он выталкивает новое табличное представление на свое место (все еще на левой стороне).Это работает без проблем, но я хотел бы иметь возможность обновить существующее подробное представление из нового табличного представления - вроде как работает приложение Apple Mail.

- я не пытаюсь создать несколько представленийв подробном представлении (справа) - я прочитал документацию и увидел пример кода, предоставленный Apple.

Я прочитал / следовал многим учебникам, но, похоже, не могу получить это относительнопростая иерархия представлений для работы.

Подробнее: -

Использование detailViewController.detailItem = @"Test"; в RootView Метод делегата didSelectTableRowAtIndexPath обновляет метку представления «Представление».Использование точно такого же кода во вновь выдвинутом табличном представлении не обновляет метку - мне не хватает контрольной точки или чего-то такого?

С момента публикации я пытался использовать протоколы и делегаты для обновления метки наподробный вид.Ярлык обновляется корректно при изменении из корневого представления с использованием новых методов, однако, когда я помещаю новый вид в корневой вид (слева), я больше не могу обновить ярлык.

Ответы [ 4 ]

1 голос
/ 30 сентября 2010

В какой-то момент после создания RootViewController (или, может быть, даже в пользовательском методе init) вы устанавливаете делегат для DetailViewController, это распространенная ошибка: когда новый rootViewController помещается в NavController, вы забыли установить delgateснова.

Вы, вероятно, создаете новый контроллер в методе:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

и записываете / увеличиваете уровень нового контроллера, прежде чем вставить его в navController.После того, как вы создадите этот новый контроллер, снова установите делегата.

newRootController.myDelegate = self.myDelegate;

Перед этим Если вы NSLog делегата непосредственно перед его использованием, вы, вероятно, найдете его ноль.

1 голос
/ 28 сентября 2010

Попробуйте свойство viewControllers вашего UISplitViewController

@ property (nonatomic, copy) NSArray

* viewControllers Обсуждение Массив в этом свойстве должен содержать ровно два контроллера представления.Контроллеры представления представлены слева направо в интерфейсе разделения представления, когда он находится в альбомной ориентации.Таким образом, контроллер представления с индексом 0 отображается с левой стороны, а контроллер просмотра с индексом 1 отображается с правой стороны интерфейса.

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

0 голосов
/ 23 декабря 2010

Добавьте это в свой RootViewController.didselectRow, прежде чем нажать на вторую таблицу (например, SubRoot)

SubRoot *subController = [[SubRoot alloc] initWithNibName:@"SubRoot" bundle:nil];
subController.detailViewController = self.detailViewController;

И создайте SubRoot.h и SubRoot.m, аналогичные RootViewController.

@class DetailViewController;
@interface SubRoot : UITableViewController {
    DetailViewController *detailViewController;
}
@property (nonatomic, retain)  DetailViewController *detailViewController;
@end

затем синтезируйте detailViewController.

Надеюсь, это поможет.

0 голосов
/ 30 ноября 2010

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

newRootViewController.detailViewController = self.detailViewController

В противном случае ваше новое корневое представление никогда не узнает о detailView. Для вашего нового корневого (табличного) представления вы должны сделать что-то вроде:

#import <UIKit/UIKit.h>
@class DetailViewController;

    @interface VorhersageTable : UIViewController {
        UITableView *vorhersageTableView;
        DetailViewController *detailViewController;
    }
    @property (nonatomic, retain) IBOutlet UITableView *vorhersageTableView;
    @property (nonatomic, retain) DetailViewController *detailViewController;
    @end

для объявления свойства detailViewController в вашем новом классе.

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