Пожар segue условно нескольким контроллерам View
После долгих дней на увольнение segue условно, мне удалось решить это, Simon ответить здесь. Пожалуйста, найдите минутку, чтобы посмотреть, или вы не можете понять, о чем я говорю ниже. Я не копировал его ответ, потому что он уже хорошо объяснил это там.
Теперь я столкнулся с новым вопросом. Что делать, если у меня есть несколько контроллеров просмотра, которые я хочу переписать с одного контроллера просмотра?
Чтобы объяснить это дальше: Скажем, у меня есть один MainViewController
с 2 кнопками. При нажатии каждой кнопки он должен перейти к соответствующему контроллеру просмотра. Первая кнопка - FirstViewController
, а вторая - SecondViewController
.
Метод, описанный в ответе Саймона, может использоваться, когда вы переходите от одного контроллера View к другому контроллеру View. Поскольку в этом методе вы привязываете segue к контроллеру View, а не к кнопке, у вас есть только один сегмент с идентификатором для этого конкретного контроллера просмотра. Поэтому я не могу различать отдельные кнопки.
Есть ли способ обхода проблемы?
Спасибо.
Ответы
Ответ 1
Возможно, было бы преждевременно говорить об этом, но я думаю, вы должны глубже изучить Segue.
Да, вы можете выполнить segure с кнопки. Просто нажмите кнопку мыши и перетащите курсор, чтобы просмотреть контроллер, который вы хотите сделать SEGUE'd. И из моего понимания только условие есть каждая кнопка нажмите результаты segue для фиксированного просмотра. Там нет никаких условий.
Кроме того, вы можете нажать навигационный контроллер вручную
YourViewController *destViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"YourDestinationViewId"];
[self.navigationController pushViewController:destViewController animated:YES];
UPDATE:
prepareForSegue слишком поздно, чтобы остановить переход от продолжения. Да, вы можете создавать множественные переходы из вашего представления в другие контроллеры представлений. И в этом случае вы должны это сделать. Не повторяйте выделение с помощью кнопки, просто определите IBACtion на кнопке, нажмите, вы можете сделать валидацию оттуда,
if(validationSuccess) {
[self performSegueWithIdentifier:@"segue1" sender:self];
}
если вы используете ios6
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
вернуть YES при успешном завершении проверки и НЕТ при отказе от продолжения.
Ответ 2
Я предлагаю вам немного поработать над вашей логикой кода.
Если я правильно понимаю, у вас есть VC (встроенный в контроллер Nav.) с 2 кнопками, и вы выяснили, как перевести каждую кнопку на другой VC.
Ваша проблема заключается в том, что вы хотите удостовериться, что даже если нажата одна из кнопок, валидация выполняется до того, как произойдет действие. Я бы посоветовал это плохой дизайн пользовательского интерфейса, потому что у пользователя есть иллюзия, что эта кнопка может что-то сделать, а затем они нажимают на нее, и ничего не происходит.
UIButton может быть подключен к IBActions (для инициирования действий) и IBOutlets (для установки их свойств). Если это кнопка, созданная непосредственно в IB, я бы подключил ее к вашему классу как свойство Outlet:
@property (nonatomic,weak) IBOutlet UIButton* myButton;
И затем установите его разрешенное значение:
self.myButton.enabled=NO;
Это будет держать кнопку и тускнеть. Это намного лучший дизайн пользовательского интерфейса, и пользователь знает, что он не должен нажимать кнопку, потому что какое-то условие не выполняется.
Я бы переработал код, чтобы вы установили это значение как отключенное по умолчанию, например, и соответствующим образом включили его в свой код, когда ваше "условие" будет выполнено.
Очевидно, что если эта кнопка создается программно (в коде без IB), то легко просто использовать вторую команду выше.
Надеюсь, что это поможет.
Ответ 3
Я просто написал другой способ вызова нескольких подробных представлений из одной таблицы. Каждая ячейка может по существу отображать другое представление. Код похож на то, что вы видите в этом сообщении, но вы по существу используете идентификаторы и атрибуты в элементе списка, чтобы определить, какой вид показывать.
https://codebylarry.com/2016/07/15/multiple-detail-views-in-swift/
override func tableView(tableView: UITableView,didSelectRowAtIndexPath indexPath: NSIndexPath) {
if indexPath.row == 1 {
self.performSegueWithIdentifier("secondView", sender: self)
} else {
self.performSegueWithIdentifier("others", sender: self)
}
}