Пожар 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)
    }
}