Перейти к текущему виду UItableView
У меня есть неопределенное количество уровней (глубина) в моем tableview, поэтому я хотел бы иметь возможность создать сегмент между представлением и самим собой, чтобы я мог вызвать его, пока у меня есть подуровни для обнаружения. Как я могу это сделать ?
Я думал о непосредственном использовании [self.navigationView pushViewController] когда мне это нужно, но я хотел бы, чтобы новый контроллер использовал определенный вид в моем SB.
Спасибо,
EDIT: на данный момент единственное решение, которое я нашел, - это дублирование VC, установка a сегмент между VC1 и VC2 называется "showNext", а сегмент между VC1 и VC2 называется так же. Разве нет лучшего решения ?
2 ответа:
Если вы используете динамические прототипы ячеек, вы, очевидно, можете сделать сегмент от ячейки табличного представления к контроллеру без каких-либо проблем.
Когда вы делаете свой сегмент, вы в конечном итоге получаете:
Но давайте представим на секунду, что есть какая-то причина, которая не работает для вас, например, вы не можете иметь сегмент из ячейки (например, вам нужно вызвать сегмент изdidSelectRowAtIndexPath
, а не После выбора ячейки). В этом случае вы не могли бы использовать это предыдущая техника.В этом случае есть несколько вариантов:
Ни один из них не идеален, но у вас есть много вариантов.
Как указал Крис , если только поддержка iOS 6 и выше, используйте вышеупомянутый метод, но (а) убедитесь, что ваш
didSelectRowAtIndexPath
используетself
дляsender
, а затемshouldPerformSegueWithIdentifier
разрешает сегмент только в том случае, еслиsender == self
(таким образом, когдаsender
является ячейкой представления таблицы, он будет отменен);Возможно, даже проще, просто не определяйте сегмент вообще, и у вас есть
didSelectRowAtIndexPath
вручнуюinstantiateViewControllerWithIdentifier
а затем нажмите / представьте этот контроллер вида соответствующим образом; илиВы можете использовать следующее, 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 будет только быть вызванным один раз.