Как можно использовать массив изображений в другом массиве из набора массивов с помощью жеста салфетки?

#ios #objective-c #arrays #xcode

#iOS #цель-c #массивы #xcode ( код x ) #xcode

Вопрос:

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

У меня есть набор массивов, которые передаются через TableView в DetailedViewController. Одним из которых являются изображения. В этом подробном представлении я хотел бы иметь возможность реализовать жест прокрутки в UIImageView, чтобы я мог прокручивать то, что по сути является массивом изображений внутри определенного элемента массива.

Псевдокод:

 Array 1:
array1-string1
array1-string2
array1-string3

Array 2:
array2-string1
array2-string2
array3-string3

Array 3:
array3-picture1
array3-picture2
array3-picture3
  

Каждый массив хранит другой набор данных, соответствующий позиции в массиве. например: Array1 все имена, Array2 все описания, Array3 все изображения.

В detailedView отображается один набор данных. например. array1-string1, array2-string1, array3-picture1.

Поправьте меня, если я ошибаюсь, но для того, чтобы использовать жест салфетки (для определенного набора данных) Мне нужен массив изображений в качестве array3-picture1 элемента.

Буду ли я указывать этот массив при первоначальном объявлении всех массивов, чтобы он был подключен к IBAction в конечном detailedViewController, имея в виду, что это вызывается при определенном переходе к TableView. ИЛИ просто объявите массив как просто массив в начале и укажите его значения где-нибудь в другом месте.

Извините, если это не имеет смысла, но работа с этим занимала мою голову!

Ответ №1:

Я бы начал с рассмотрения этих входных данных, поскольку они еще не находятся в форме объекта. Вы можете создать подкласс NSObject или словарь, объединяющий связанные данные. Например (с использованием словаря):

 NSMutableArray *objects = [NSMutableArray array];
NSAssert(array1.count == array2.count == array3.count, @"arrays must be of equal length");

NSInteger count = array1.count;
for (NSInteger i=0; i<count; i  ) {
    NSDictionary *d = @{ @"name": array1[i], @"description": array2[i], @"image": array3[i] };
    [objects addObject:d];
}
  

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

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"DetailSegue"]) {
        MyDetailViewController *vc = segue.destinationViewController;
        NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
        vc.object = self.objects[selectedIndexPath.row];
    }
}
  

Затем detail vc выполняет свою работу, ссылаясь на общедоступное свойство, которое, как я предполагал выше, называется object. например:

 self.descriptionLabel.text = self.object[@"description"];