Как сделать много контроллеров представления быстрым, в конструкторе интерфейсов? - PullRequest
0 голосов
/ 03 августа 2011

Я делаю приложение, которое имеет табличное представление и DetailViewController.Я использую код Apple «MultipleDetailViews» в качестве панели запуска.Я хочу, чтобы у этого приложения было около 100 строк в разделенном виде, и я хочу, чтобы подробный вид менялся для каждой строки (прочитайте 100 просмотров).Как я могу сделать это, используя построитель интерфейса, но не генерируя 100 файлов классов и меняя имена неоднократно?

В настоящее время у меня есть единственный способ - создать отдельные контроллеры представления (с файлами классов) вручную.Однако это очень волнительно.

Есть ли в любом случае, я могу использовать один DetailViewController, добавить несколько представлений к нему внутри конструктора интерфейса и выдвигать каждое представление, когда я выбираю строку в табличном представлении.к каждому представлению я хочу добавить фоновое изображение и три кнопки, которые содержат разные звуки (представление каждой строки будет иметь три уникальных звука).Как я могу создать только три IBActions и изменить путь к звуковому файлу в соответствии с выбранной строкой?

Есть ли какой-нибудь эффективный по времени способ сделать то, что я спрашиваю?

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

100 просмотр контроллеров классов?Это не хорошо.

100 экземпляров одного класса контроллера представления?Надеюсь, что нет.

Давайте рассмотрим поведение, которое вы описали с помощью 2, просто 2. У вас есть контроллер для вашего представления таблицы и контроллер для вашего подробного представления.Вот и все.

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

Это может быть из соглашения о присвоении имен для ваших изображений и звуковых ресурсов ('background0', 'background1', ...) или из некоторого файла конфигурации, который определяет фоновое изображение и звуки для каждогоrow (plist, содержащий массив словарей: [{background: "moon.png", firstSound: "clown.mp3", secondSound: "moose.mp3", thirdSound: "water.mp3}, {...},...]).

1 голос
/ 03 августа 2011

Похоже, что каждый из ваших подробных видов будет достаточно похожим, так что вы можете создать один экземпляр UIViewController и реконфигурировать его при каждом касании ячейки. Вот пример того, как можно изменить проект MultipleDetailViews , чтобы изменить цвет фона одного экземпляра UIViewController в зависимости от выбранной строки.

static const NSUInteger kRowCount = 100;

- (void)viewDidLoad {
    [super viewDidLoad];
    self.contentSizeForViewInPopover = CGSizeMake(310.0, self.tableView.rowHeight*kRowCount);
    // Create an array of colors to cycle through
    self.colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil];
}

#pramga mark - UITableViewDataSource methods

- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section {
    return kRowCount;
}

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Dequeue or create cell
    cell.textLabel.text = [NSString stringWithFormat:@"View Controller #%d", indexPath.row + 1];
    return cell;
}

#pramga mark - UITableViewDataDelegate methods

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Don't create a new view controller, just reconfigure the on that is already displayed
    DetailViewController *dvc = [self.splitViewController.viewControllers objectAtIndex:1];
    dvc.view.backgroundColor = [colors objectAtIndex:(indexPath.row % [colors count])];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...