2010-05-18 4 views
2

Мне нужно реализовать 1-уровневый контурный вид из UITableView. Ячейки, у которых есть дети, будут иметь символ «+», и если пользователь нажимает на него, ячейки под ним должны сдвигаться вниз, а дочерние ячейки текущей выбранной строки должны появляться. Скольжение ячеек должно быть видимым, и если пользователь нажимает кнопку «-» уже расширенной строки, дочерние ячейки должны возвращаться в родительский.Вид структуры из UITableView

Я пробовал поиск по Google, но не нашел указателей.

Как начать, должен ли я подкласс UITableView? Или я должен реализовать свой собственный подкласс класса и обрабатывать все там?

Я как-то чувствую, что подкласс UITableView будет проще, потому что он будет обрабатывать весь выбор строки для нас, но я не могу понять, как это сделать.

Спасибо и наилучшими пожеланиями, Радж

ответ

1

Вы должны создать подкласс и UITableViewCell

@interface OutlineCell : UITableViewCell 

Затем в ViewController вашего стола

- (UITableViewCell*) tableView: (UITableView*) tableView cellForRowAtIndexPath: (NSIndexPath*) indexPath { 
    NSString* MyIdentifier = @"MyIdentifier"; 

    OutlineCell* cell = (OutlineCell*) [tableView dequeueReusableCellWithIdentifier: MyIdentifier]; 
    if (cell == nil) { 
     cell = [[OutlineCell alloc] init]; 
    } 

    // Populate cell data 
} 

Вы можете определить интерфейс через IB, создавая пустой XIB и перетаскивание UITableViewCell, с вашим пользовательским классом OutlineCell в качестве владельца файла. Затем добавьте кнопки, метки и так далее.

EDIT: если вы хотите получить внутреннюю таблицу внутри ячейки, попробуйте тот же подход, добавив подпрограмму в UITableViewCell, которую вы определяете, с UITableView внутри него.

+0

Блестящий подход, почему я не подумал об этом? Ну, у меня есть одно сомнение, как, как мне добиться скользящего эффекта строк, которые ниже строки, которую нужно расширить? Есть идеи для этого? Согласно этому подходу, я полагаю, мы должны обеспечить высоту строки для каждой строки, поэтому, когда расширяется строка таблицы, мы предоставляем новую строку в зависимости от количества детей. Скажем, высота оригинала была 20, и теперь она имеет 5 детей, новая высота строки будет равна 100. Я полагаю, что таблица будет просто появляться с новой высотой строки без эффекта скольжения, как обойти это? –

+0

Ну, я не знаю, работает ли это, но когда кнопка + была нажата, чтобы развернуть строку и показать дочерние строки, вы должны получить фрейм ячейки и изменить свойство size.height в анимации UIView блок. Эта работа для меня, когда я использую информационные панели, чем сворачивается и расширяется. Возможно, это работает и в этой ситуации ^^ – emenegro

+0

Примечание: Это хороший подход, но мне было очень сложно, когда дело доходило до перезагрузки данных таблицы и во время анимации. Новый tableView может быть встроен в ячейку, увеличивая его высоту, но когда анимация вступает в игру, tableView добавляется как subview идет позади ячейки, причина - я не знаю!Также я действительно сомневаюсь, что вызов tableView reload для main tableView перезагрузит внутренний tableView или нет. Если нет, мы можем перезагрузить данные, когда делегат -tableView: cellForRowAtIndexPath: из первого tableView, но я сомневаюсь в порядке перезагрузки. Лучший подход - сгладить структуру дерева. –

2

Не можете ли вы сохранить словарь в качестве источника данных? словарь, содержащий массив словарей. И внутренний словарь с двумя ключевыми парами значений:

  1. IsExpanded
  2. детей информацию.

При проверке bool isExpanded вы получите количество строк. И вам нужно настроить камеру для добавления кнопок. Будет ли это работать на вас?

Вы можете дифференцировать ячейки детей, слегка нажав на содержимое ячейки справа.

+0

Итак, если строка расширена, я представлю больше numberOfRows в делегате tableView. Как я могу добиться скользящего эффекта элементов ниже строки, которую нужно расширить с помощью этого метода? Полагаю, здесь также возникает одна и та же проблема: повторное появление tableView при перезагрузке табличного представления при расширении строки. –

+0

Ну, я полагаю, что скольжение строк под строкой, которая должна расширяться, автоматически обрабатывается табличным представлением. Мне придется использовать смешанное решение и Эспуз. Точно так же. , , –

Смежные вопросы