@ubuntuman
Beginner developer

Как лучше всего передавать данные между ViewContoller'ами?

Доброго дня всем. Начал пробовать создавать приложения под яблочную технику и от недостатка информации по теме возникли вопросы относительно "нормальности" применяемых методов.
Сама задача: сделать приложение для iOS с использованием нескольких ViewController'ов на одном storyboard. Первая форма содержит список пользователей, вторая выводит информацию о конкретно пользователе. Переход на второй экран происходит после нажатия на кнопку.
Как реализовал я: вытащил кнопку на форму, правой кнопкой перетянул стрелочку на вторую форму и выбрал "show", а данные во вторую форму передал в функции prepareForSegue, проверяя название segue (вдруг понадобится добавить переход на ещё одну форму). Так и задумывалась реализация переходов или есть какой-то более "официальный" способ?
Пробовал соединять нажатие кнопки с функцией, где вручную создавал нужный контроллер и добавлял его в стек navigationController, однако Xcode выдаёт предупреждение, типа вы действуете как-то не так.

Собственно, как же вы реализуете подобный функционал в своих приложениях?

UPDATE
Вот товарищи рассказали, что лучше делать это через кнопку, однако теперь такой вопрос: что именно не нравится Xcode и как убрать это предупреждение (если его вообще нужно убирать)?
  • Вопрос задан
  • 6721 просмотр
Решения вопроса 3
DaskOFF
@DaskOFF
iOS Developer
добавлял его в стек navigationController


Вы должны убрать переход на другой контроллев на storyboard. В функции, которая вызывается по нажатию на кнопку вы все делаете правильно, создаете контроллер, передаете ему информацию и уже выбираете как его отображать.
Например, чтобы сделать push анимацию в navigation controller вы должны вызвать метод
[self.navigationController pushViewController:YourController animated:YES];


Чтобы показать новый контроллер в виде модального окна следует сделать следующий вызов
AuthorizationVC *authVC = [AuthorizationVC new];
// передаем необходимые данные контроллеру
//...
// Показываем его выезжающим снизу
[self presentViewController:[authVC rk_vcToNavController] animated:YES completion:nil];

Для того, чтобы его потом закрыть вызываете метод у показанного контроллера!
[self dismissViewControllerAnimated:YES completion:nil];
Ответ написан
ManWithBear
@ManWithBear
Swift Adept, Prague
Так xcode не ругается. Главное убедитесь, что первый контроллер находиться в стеке navigationController'а
AccountEditVC *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"AccountEditVC"];
[vc editAccount:tmpAcc];
vc.delegate = self;
[self.navigationController pushViewController:vc animated:YES];
Ответ написан
petruska
@petruska
IOS Developer
ну про передачу дан между контрол почитайте это www.imaladec.com/story/singleton
а вобще про контроллеры,переходы и т.д надо почитать(посмотреть)уроки,на фрумах это понять сложно
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Petr2008
+5 копеек. Если работаете один - делайте как Вам удобнее, если в команде - через singleton, чтоб не разбираться в set и get.
Ответ написан
@iFamily
Expert in Server-Side-Swift and iOS development
Правильно и через segue и без него. А предупреждения о том, что вы действуете как-то не так, не может быть. Скриншот прилагайте или хотя бы текст предупреждения. Наверняка этот warning будет говорить о чем-то другом, нежели о навигации.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы