У меня слишком много просмотров на одной раскадровке, что заставляет ее работать очень медленно. Мне сказали, что решение этой проблемы будет состоять в том, чтобы разбить одну раскадровку на несколько раскадровки. Может ли кто-нибудь сказать мне, как я могу перейти из представления на раскадровке 1 к представлению в раскадровке 2 с помощью кнопки?Segue из одной раскадровки в другую раскадровку?
ответ
Я пробовал все, что читал, но все равно не имел успеха. мне удалось заставить его работать, используя Rob Browns Storyboard Link Это легко осуществить, и работает очень быстро
Прежде всего, разбить раскадровку на несколько отдельных - это отличная идея, которая избавляет от головной боли (особенно если вы находитесь в команде и имеете дело с большим количеством конфликтов слияния в файле раскадровки).
Теперь, чтобы ответить на ваш вопрос - вы не можете выполнить переход между двумя раскадровки обязательно, но одно решение я имел большой успех с, чтобы сделать что-то вроде этого:
- (IBAction)buttonPressed:(id)sender {
UIViewController *otherVC = [[UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil] instantiateInitialViewController]; //Or get a VC by its identifier
[self.navigationController pushViewController:otherVC animated:YES];
}
Просто загрузите другую раскадровку и либо звоните instantiateInitialViewController
, либо instantiateViewControllerWithIdentifier:
, тогда сделайте любой переход, который вы хотели бы.
Надеюсь, это поможет.
Таким образом, вы просто ссылаться на раскадровку, и она будет непосредственно перейти к исходному ViewController в этой раскадровке? – BrownEye
Я создал две раскадровки, поместил кнопку на VC на первом и сделал ее buttonPressed. Он не ссылается на второй, приложение просто падает. Я все еще довольно новичок в Obj C, поэтому я не уверен, что то, что я сделал, даже правильно. Является ли код, который вы разместили, только тот код, который мне нужен? – BrownEye
@BrownEye, все зависит. Вы используете навигационный контроллер в первой раскадровке? Этот код просто показывает, как получить VC со второй раскадровки. Вы не можете переходить между ними, это ручной процесс. Какая катастрофа вы получаете? –
Другое решение с использованием перетекает (IOS SDK 6.0+), которая хранит код, разделенные цели и оставляет место для настройки:
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
//check/validate/abort segue
return YES;
}//optional
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
//sender - segue/destination related preparations/data transfer
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIViewController *destination = [[UIStoryboard storyboardWithName:@"SomeStoryboard" bundle:nil] instantiateInitialViewController];
UIStoryboardSegue *segue = [UIStoryboardSegue segueWithIdentifier:@"identifier" source:self destination:destination performHandler:^(void) {
//view transition/animation
[self.navigationController pushViewController:destination animated:YES];
}];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
[self shouldPerformSegueWithIdentifier:segue.identifier sender:cell];//optional
[self prepareForSegue:segue sender:cell];
[segue perform];
}
Примечание:UITableViewCell *cell
используется как sender
сохранить по умолчанию поведение TableViewController
ответа.
Отличное решение Nocross, спасибо! Я вижу, что ваш фрагмент делает «Push» segue. Я адаптировал его, чтобы выполнить «Заменить», изменив код в блоке на '(void) setViewControllers: (NSArray *) viewControllers animated: (BOOL) animated' – jbbenni
В Swift (IOS 8.1) это довольно легко:
var storyboard: UIStoryboard = UIStoryboard(name: "Another", bundle: nil)
var vc = storyboard.instantiateViewControllerWithIdentifier("NextViewController") as AnotherViewController
self.showViewController(vc, sender: self)
Обновление для Swift 3:
let storyboard: UIStoryboard = UIStoryboard(name: "Another", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "NextViewController") as! AnotherViewController
self.show(vc, sender: self)
Вот простой Swift решение:
let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ViewController") as UIViewController
// .instantiatViewControllerWithIdentifier() returns AnyObject! this must be downcast to utilize it
self.presentViewController(viewController, animated: false, completion: nil)
Наконец, XCode 7 добавила эту функцию, в которой вы можете переходить между контроллерами представления в два различные раскадровки с использованием построителя интерфейса. До сих пор мы должны были делать это программно.
Это отличное новое дополнение, спасибо, что указали его! – BrownEye
Swift 3
let vc = UIStoryboard(name: "StoryboardName", bundle: nil).instantiateViewController(withIdentifier: "ViewControllerIdentifier") as? ExpectedViewControllerClass
self.show(vc, sender: self)
Где "StroboardName" это имя вашего .storyboardfile. «ViewControllerIdentifier» - это идентификатор представления в доске объявлений. И «я» любой UIViewController
In my case, the identifier was "chooseCountryViewController"
- 1. Segue в другую раскадровку через построитель интерфейсов
- 2. Как перейти с одной раскадровки на другую раскадровку
- 3. Как заменить раскадровку segue
- 4. Segue в другой раскадровки?
- 5. Как выполнить пользовательский segue через две раскадровки?
- 6. ошибка «непризнанный селектор отправлен в экземпляр» после пользовательского segue в другую раскадровку из метода делегата
- 7. iOS7 segue без использования раскадровки
- 8. выполнить modal segue, не используя раскадровку
- 9. Передача объекта через раскадровку Segue
- 10. Представляем другую раскадровку при запуске
- 11. Segue к другому раскадровки
- 12. Push segue с раскадровки
- 13. Как заблокировать раскадровки SEGUE
- 14. Условный Segue Использование раскадровки
- 15. перехода на другую раскадровку
- 16. Segue к контроллеру UINavigation программно без раскадровки
- 17. можно добавить раскадровку в проект без раскадровки?
- 18. Переход Анимация без раскадровки segue swift
- 19. Custom segue crashing (второй) iPad раскадровки
- 20. iOS Swift Segue из TableView Cell без раскадровки
- 21. ИОС навигации стека с использованием раскадровки SEGUE
- 22. Сторнирование пользовательского Segue с раскадровки
- 23. Настройка popover segue программно с использованием идентификатора из раскадровки
- 24. Segue от раскадровки до XIB
- 25. Активировать раскадровку из UserControl
- 26. Делегат нуль, используя раскадровку embed segue
- 27. Выполнение segue после успешного входа в раскадровки
- 28. Как передать данные в другую раскадровку в xCode?
- 29. Перетащите Segue To Self в раскадровки
- 30. Анимация Сетка из одной позиции в другую
Я бы определенно рекомендовал его. Я использовал его для нескольких приложений сейчас, и это просто так просто – BrownEye