2014-10-29 2 views
0

У меня есть таблица, в которой кнопки раскрытия подробностей вызывают MyDetailViewController и в performSegueWithIdentifier:sender: Я устанавливаю несколько переменных. Но оказывается, что мне нужно что-то более сложное: мне нужно подтипов из MyDetailViewController (MyFooController : MyDetailViewController, MyBarController : MyDetailViewController и т. Д.) В зависимости от того, какая строка выбрана.Как перечислить один из нескольких подтипов UIViewController с раскадрой?

Моя первая мысль состояла в том, чтобы назначить destinationViewController в UIStoryboardSegue в performSegueWithIdentifer:sender:, но это переменная только для чтения.

Есть ли простой способ сделать это с помощью раскадровки? Должен ли я создать пользовательский Segue? Или я должен делать это программно?

ответ

0

Вы можете использовать несколько segues, по одному для каждого из ваших подтипов контроллеров, нет фактического ограничения того, сколько вы можете использовать с одного viewController, или вы можете, в зависимости от выбранной ячейки, создать представление контроллер и вставьте его в стек вручную, что-то в линиях:

MyBarController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"myBarController"]; // You set the identifiers in the storyboard itself 
[self.navigationController pushViewController:vc animated:YES]; 
+0

Это то, о чем я думал, когда сказал «сделай это программно». Мне было интересно, есть ли способ сделать это, используя визуальную конструкцию Storiesboards. –

+0

Вот где несколько сцен вступают в игру. Сделайте один шаг для каждого из ваших целевых контроллеров и вызовите их в зависимости от того, какой из них вам нужен в данный момент. – Adis

0

вы не можете подключить несколько перетекает к кнопке на детали раскрытия, но вы можете подключить столько перетекает, как вы хотите от контроллера , Внедрите tableView: accessoryButtonTappedForRowWithIndexPath :, и этот метод будет вызываться, когда пользователь нажимает кнопку. Вы можете использовать аргумент indexPath, чтобы решить, какой segue выполнить, а затем вызвать segue с помощью функции performSegueWithIdentifier.

0

В качестве третьей альтернативы вы можете создать различные ячейки прототипа в раскадровке, дать каждому другому reuseIdentifier и создать различные segues из каждой ячейки прототипа. Затем в вашем методе cellForRowAtIndexPath: выберите правильные reuseIdentifier, когда выгружаете ячейки, согласно строке.