Перейти к текущему виду UItableView


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

Я думал о непосредственном использовании [self.navigationView pushViewController] когда мне это нужно, но я хотел бы, чтобы новый контроллер использовал определенный вид в моем SB.

Спасибо,

EDIT: на данный момент единственное решение, которое я нашел, - это дублирование VC, установка a сегмент между VC1 и VC2 называется "showNext", а сегмент между VC1 и VC2 называется так же. Разве нет лучшего решения ?

2 2

2 ответа:

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

сделать переход от ячейки к контроллеру

Когда вы делаете свой сегмент, вы в конечном итоге получаете:

круговой сегмент

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

В этом случае есть несколько вариантов:

  1. Как указал Крис , если только поддержка iOS 6 и выше, используйте вышеупомянутый метод, но (а) убедитесь, что ваш didSelectRowAtIndexPath использует self для sender, а затем shouldPerformSegueWithIdentifier разрешает сегмент только в том случае, если sender == self (таким образом, когда sender является ячейкой представления таблицы, он будет отменен);

  2. Возможно, даже проще, просто не определяйте сегмент вообще, и у вас есть didSelectRowAtIndexPath вручную instantiateViewControllerWithIdentifier а затем нажмите / представьте этот контроллер вида соответствующим образом; или

  3. Вы можете использовать следующее, kludgy work-around: короче говоря, добавьте кнопку в контроллер вида (перетащите ее вниз на панель внизу), где она не будет отображаться на виде, но вы можете использовать ее сегменты. Итак, сначала перетащите закругленную кнопку на панель контроллера в нижней части сцены:

    кнопка перетаскивания

    Теперь вы можете перейти от этой кнопки к вашему виду контроллер:

    сделать сегмент из скрытой кнопки

    И таким образом, вы снова получаете самореферентный сегмент:

    окончательной кнопку переход

    Вы должны дать этому сегменту идентификатор, так что вы можете вызвать его программно через performSegueWithIdentifier, но это работает. Не самое элегантное решение, но я думаю, что это лучше, чем иметь дополнительную сцену на раскадровке.

Ни один из них не идеален, но у вас есть много вариантов.

Этот процесс работал для меня, чтобы сделать то же самое...

Настройте tableview в раскадровке, как обычно. Не присваивайте ячейке-прототипу идентификатор ячейки. Настройте свой сегмент, как вы сделали выше, перетаскивая его из ячейки в контроллер.

В вашем viewDidLoad зарегистрируйте класс ячейки

//register the cell identifier as we are not loading form a storybard
[_aTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"CellID"];

В вашем cellForRowAtIndexPath настройте свою ячейку

static NSString *CellIdentifier = @"CellID";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

Теперь вы можете использовать didSelectRowAtIndexPath и вызвать performSegueWithIdentifier. prepareForSegue будет только быть вызванным один раз.