Форум программистов, компьютерный форум CyberForum.ru

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Slava-hacker32
7 / 7 / 0
Регистрация: 16.11.2011
Сообщений: 245
#1

В одной ячейке таблицы несколько повторяющихся элементов - Программирование iOS

04.04.2015, 23:41. Просмотров 759. Ответов 2
Метки нет (Все метки)

Добрый день. Прошу помощи в виде совета, а не просьбы написать вместо меня. Учусь работать с VK API и решил вывести посты со стены юзера. Если по одному типу данных в ячейке (одна аудиозапись, одно видео, текст, репост) то все просто и это я реализовал, но потом стал вопрос, что делать если в одном посту будет две фотографии или две и больше аудиозаписи)? Раньше было один пост = одна ячейка таблицы (для каждого типа поста своя кастомная ячейка), но как поступить теперь я даже не могу придумать. Была идея все посты сделать массивами, что бы в массиве постов были массивы с находящимися элементами (где два элемента в массиве где 5), но ничего не получается, так как в один массив добавляются данные из других постов (по типам они одинаковые, но должны быть в разных ячейках). Такого элемента как идентификатор поста я не нашел (что бы сравнивать если эта фотка принадлежит этому посту то добавляем к массиву, если нет то создаем новый. Именно в этом месте я и застрял даже идей уже нет.

Даже если я распределю данные по массивам, как их потом правильно отображать, если с картинками все просто, внутрь ячейки вкинуть колекшнВью и в Колекшине отображать картинки, то как с аудиозаписями поступить? Засунуть внутрь ячейки еще один tableView и уже во внутреннем TV отображать аудиозаписи (вариант хорош тем, что у меня сохранится контроль над кнопкой запуска/остановки файла), но а вообще как этот вариант?
Буду благодарен за помощь в первую очередь интересует то как эти данные сохранить (может в классах или родительском классе создать какое то свойство или массив)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2015, 23:41     В одной ячейке таблицы несколько повторяющихся элементов
Посмотрите здесь:
Подсчет повторяющихся значений в NSArray Objective-C
Отслеживание тапа по кастомной ячейке в таблице
C++ Builder Несколько строк в одной ячейке таблицы
C# Вывод информации в виде таблицы (не выводит несколько строк в одной ячейке)
MS Excel Несколько значений в одной ячейке
Несколько значений в одной ячейке MS Access
Несколько данных в одной ячейке PHP
Несколько строк в одной ячейке MS Access
Несколько значений в одной ячейке SQL Server
Несколько строк текста в одной ячейке
Разделение данных из одной ячейке на несколько MS Excel
DataGridView несколько строк в одной ячейке C#

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HellBoy4eG
7 / 7 / 1
Регистрация: 15.10.2013
Сообщений: 18
15.04.2015, 18:32     В одной ячейке таблицы несколько повторяющихся элементов #2
Немого сказать, что окончательно тебя понял, но заметил, что ты не используешь секции. Опишу небольшой пример!
Примеры кода буду писать на Свифте!

создаешь перечисление постов, это будет количество секций
Objective-C
1
2
3
4
5
6
enum DetailSectionType:Int {
    case Photo = 0
    case Video= 1
    case Music = 2
    case DetailSectionCount = 3 // Вот это и будет количеством секций
}
по надобности создаешь 3 кастомные ячейки если посты будут похожими используешь одну для обоих
в примере будут 3 кастомные ячейки
UITableViewPhotoCell
UITableView Video Cell
UITableViewMusicCell


Objective-C
1
2
3
4
// MARK: - Table view data source
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return DetailSectionType.DetailSectionCount.rawValue //Количество секций будет 3
}
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
// можно использовать и 1 массив, это зависит от того, как ты получаешь данные
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        let type:DetailSectionType = DetailSectionType(rawValue: section)!
        
        switch (type) {
        case DetailSectionType.Photo:
            return self.photosArray.count //в случае с фото и видео можно создать ячейку c Пикер вью и уже в его делегате указывать количество ячеек
        case DetailSectionType. Video:
            return self.videosArray.count
        case DetailSectionType.Music:
            return self.musicArray.count
      }
}
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell:UITableViewCell = UITableViewCell()
    // Photo
    if (indexPath.section == DetailSectionType.Photo.rawValue) {
        let photoCell: UITableViewPhotoCell = tableView.dequeueReusableCellWithIdentifier("UITableViewPhotoCell") as UITableViewPhotoCell
        //инициализация UITableViewPhotoCell
        cell = photoCell
        // Video
    } else if (indexPath.section == DetailSectionType.Video.rawValue) {
         let photoCell: UITableViewVideoCell = tableView.dequeueReusableCellWithIdentifier("UITableViewVideoCell") as UITableViewVideoCell
         //инициализация UITableViewVideoCell
         cell = photoCell
         // Music
    } else if (indexPath.section == DetailSectionType.Music.rawValue) {
         let photoCell: UITableViewMusicCell = tableView.dequeueReusableCellWithIdentifier("UITableViewMusicCell") as UITableViewMusicCell
         //инициализация UITableViewMusicCell
         cell = photoCell
    }
    return cell
}
 
//Ну и высоту
 
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        switch indexPath.section{
        case DetailSectionType.Photo.rawValue:
            return 35 // можно задать динамически от содержания контента
        case DetailSectionType.Video.rawValue:
            return 35
        case DetailSectionType.Music.rawValue:
            return 35
   }
}
Надеюсь поможет...
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,276
15.04.2015, 23:10     В одной ячейке таблицы несколько повторяющихся элементов #3
Цитата Сообщение от Slava-hacker32 Посмотреть сообщение
Такого элемента как идентификатор поста я не нашел
вот честно незнаком с вк апи, но может быть они банально по таймстемпу разделяются?
не уверен что за одну секунду реально создать несколько постов, а если и реально, то возможно время уточняется по миллисекундам?

поискал - вот есть https://vk.com/dev/wall.post, как по мне все доступно описано, как решить ваш первый вопрос,
айдишники есть, все гут

Цитата Сообщение от Slava-hacker32 Посмотреть сообщение
если с картинками все просто, внутрь ячейки вкинуть колекшнВью и в Колекшине отображать картинки, то как с аудиозаписями поступить? Засунуть внутрь ячейки еще один tableView и уже во внутреннем TV отображать аудиозаписи (вариант хорош тем, что у меня сохранится контроль над кнопкой запуска/остановки файла), но а вообще как этот вариант?
второе - а чем колекшн вью "проще" или лучше чем тейбл вью?
как по мне - одно и тоже
раз считаете, что колекшн вью - ок, тогда таблица - тоже ок
другой вопрос - кто будет датасорсом для этих таблиц или колекшнов внутри ячеек
так тут я бы конечно выделил отдельные классы для этого и сделал бы их переменными внутри основного датасорса или контроллера, чтобы они могли тригерить ему свои ивенты, за которые они не могут принять решения сами,
но ради всего святого, не делайте ячейку датасорсом, ячейка - это просто вью

Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru