Подтвердить что ты не робот

Пожар segue условно нескольким контроллерам View

После долгих дней на увольнение segue условно, мне удалось решить это, Simon ответить здесь. Пожалуйста, найдите минутку, чтобы посмотреть, или вы не можете понять, о чем я говорю ниже. Я не копировал его ответ, потому что он уже хорошо объяснил это там.

Теперь я столкнулся с новым вопросом. Что делать, если у меня есть несколько контроллеров просмотра, которые я хочу переписать с одного контроллера просмотра?

Чтобы объяснить это дальше: Скажем, у меня есть один MainViewController с 2 кнопками. При нажатии каждой кнопки он должен перейти к соответствующему контроллеру просмотра. Первая кнопка - FirstViewController, а вторая - SecondViewController.

Метод, описанный в ответе Саймона, может использоваться, когда вы переходите от одного контроллера View к другому контроллеру View. Поскольку в этом методе вы привязываете segue к контроллеру View, а не к кнопке, у вас есть только один сегмент с идентификатором для этого конкретного контроллера просмотра. Поэтому я не могу различать отдельные кнопки.

Есть ли способ обхода проблемы?

Спасибо.

4b9b3361

Ответ 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)
    }
}