2016-10-25 3 views
-1

Я начал изучать ios. Я исхожу из фона веб-разработки.IOS Segue надлежащее использование

Я немного запутался, когда нужно использовать segue из ViewController или с помощью определенной кнопки.

Например: если у меня есть HomeViewController, тогда у меня есть кнопка «Соглашайтесь на условия», когда я ее коснусь, Она займет у меня TermsViewController. Должен ли я создать segue из кнопки «Согласиться» или выбрав весь ViewController (из верхней панели)? Каковы различия?

Заранее спасибо

+1

Здравствуйте, вы должны уточнить свой вопрос. Кроме того, вы задаете несколько вопросов в одном, лучше быть конкретным для одного вопроса и дать подробности об этом, чтобы люди могли получать больше информации, чтобы помочь вам. –

+0

Спасибо @MagoNicolasPalacios Я постараюсь быть более конкретным – Eduardo

ответ

2

Я склонен создавать SEGUE из самого контроллера представления.

Вы бы затем создать IBAction для кнопки на контроллере представления, и есть вызов действия [self performSegueWithIdentifier:@"identifier"];

Это более или менее точно, что создает переход от кнопки делает. Если это 100% все, что вам нужно сделать, это вполне приемлемо. Но это более удобное решение, так как оно позволяет вам легко добавлять дополнительные функции к кнопкам. Например, ваша кнопка требует, чтобы вы сохранили объект на сервере. Вы хотите сохранить этот объект перед тем, как отойти от страницы, чтобы вы поместили вызов performSegueWithIdentifier в блок завершения сохранения.

Кроме того, создание segue из раскадровки с идентификатором позволяет использовать этот сегмент для нескольких кнопок. Например, скажем, у вас есть контроллер вида с 4 кнопками, которые все идут на страницу информации, относящуюся к этой кнопке. Вам нужен только один «goToInfo» segue на вашем раскадровке, но вы можете настроить 4 отдельных IBActions для тех кнопок, которые выполняют разные настройки, а затем подготовить контроллер просмотра на основе данных, настроенных в IBActions для кнопок. Это будет держать ваш раскадровки немного более чистым, потому что вместо того, чтобы потребоваться 4 разных segues, которые все видны на SB, у вас есть только 1.

tl; dr - создание segue с кнопки прекрасно, пока это 100% единственное, что вам нужно сделать, когда нажимаете кнопку. Если в фоновом режиме есть что-то еще, было бы лучше создать segue из VC и вызвать его через свой идентификатор после выполнения дополнительных шагов.

Редактировать - Я полагаю, что я немного ввел вас в заблуждение. Единственное, что вы можете сделать, это переопределить метод -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender. Вы устанавливаете проверку if/else if chain, чтобы убедиться, что segue.identifier равен строкам, которым вы устанавливаете идентификатор, и вы можете выполнять различную логику в тех блоках, которые будут вызваны, даже если вы присоедините segue непосредственно к кнопке , Единственная проблема заключается в том, что это функция void, и после этого segue будет выполняться независимо от любых проблем, которые могут возникнуть с данными, введенными на странице.

Теперь я обычно переопределяю этот метод, чтобы передавать данные между VC. Здесь вы должны установить свойства segue.destinationViewController, после того, как вы внесете его в класс ViewController, который, как вы знаете. Я бы не стал вводить здесь какую-либо тяжелую лифтинговую логику, и, разумеется, сервер не называет.Это те случаи, когда вы обязательно захотите настроить IBAction с помощью кнопки, которая выполняет логический/серверный вызов, и звонит performSegue, когда вы закончите, и знаете, что все работает правильно.

1

от кнопки

Это будет вызывать SEGUE назначенный ему.

из ViewController

Вы должны назвать performSegue(withIdentifier: String, sender: Any?) себя

+0

Привет @Honey, спасибо за ваш ответ. Еще одна вещь: могу ли я назвать segue из любого ViewController или только из 2, которые связаны? – Eduardo

+0

@Eduardo КАЖДЫЙ Segue, который вы создаете в раскадровке, имеет «destinationViewcontroller» и «sourceViewcontroller». Так что ваша привязка к ним только. Если вы хотите, чтобы вы могли перейти в другой viewController на ходу, то вы должны сделать это программно, не используя segues и используя 'showViewcontroller' или' presentViewController' – Honey

+0

@Eduardo 'performSegueWithIdentifier' - это метод экземпляра, в отличие от метода класса , Он проверяет segue с этим идентификатором, который исходит из контроллера просмотра, на который вы его вызываете., А не какой-либо segue на раскадровке. –

Смежные вопросы