У меня есть много аннотаций в виде карты (с rightCalloutAccessory
кнопками). Кнопка выполнит переход от этого mapview
к tableview
. Я хочу передать tableview
другой объект (который содержит данные) в зависимости от того, какая кнопка вызова была нажата.
Например: (полностью выдуманный)
- annotation1 (Остин) -> передать данные объекта 1 (относится к Остину)
- annotation2 (Даллас) -> передать данные объекта 2 (относится к Далласу)
- annotation3 (Хьюстон) -> передать данные obj 3 и так далее ... (вы поняли)
Я могу определить, какая кнопка выноски была нажата.
Я использую prepareForSegue
: для передачи данных obj к месту назначения ViewController
. Поскольку я не могу заставить этот вызов принять дополнительный аргумент для нужного мне объекта данных, каковы некоторые изящные способы достижения того же эффекта (динамический объект данных)?
Любой совет будет оценен.
ios
xcode
uitableview
mapkit
storyboard
chizzle
источник
источник
Ответы:
Просто возьмите ссылку на целевой контроллер представления в
prepareForSegue:
методе и передайте туда любые нужные вам объекты. Вот пример ...ПЕРЕСМОТР: Вы также можете использовать
performSegueWithIdentifier:sender:
метод, чтобы активировать переход к новому виду на основе выбора или нажатия кнопки.Например, предположим, у меня было два контроллера представления. Первая содержит три кнопки, а вторая должна знать, какая из этих кнопок была нажата перед переходом. Вы можете подключить кнопки до
IBAction
в вашем коде, который используетperformSegueWithIdentifier:
метод, как это ...РЕДАКТИРОВАТЬ: демо-приложение, которое я первоначально приложил, теперь шесть лет, поэтому я удалил его, чтобы избежать путаницы.
источник
[vc setMyObjectHere:object];
это динамически. то есть obj1 для button1, obj2 для button2 Проблема в том, что я не могу передать аргумент. Есть ли способ обойти это?Иногда полезно избегать создания зависимости во время компиляции между двумя контроллерами представления. Вот как вы можете сделать это, не заботясь о типе контроллера представления назначения:
Таким образом, пока ваш конечный контроллер представления объявляет открытое свойство, например:
Вы можете установить это свойство в предыдущем контроллере представления, как я описал выше.
источник
setMyData:
. Это зависимость. Тот факт, что вы используете селектор, чтобы избежать ошибки компиляции, следует рассматривать как слабость вашего подхода, а не как выгоду. Меня шокирует, как многие разработчики утратили концепцию, согласно которой ошибки времени компиляции следует предпочитать ошибкам времени выполнения.В Swift 4.2 я бы сделал что-то подобное:
источник
У меня есть класс отправителя , как это
Я использую этот класс отправителя для передачи объектов
prepareForSeque:sender:
источник
prepareForSegue
или мы реализуем это, и предполагается, что prepareForSegue вызывается сам по себе, т.е. нам не нужно делать что-то вроде[self prepareForSegue]
Я столкнулся с этим вопросом, когда пытался научиться передавать данные из одного View Controller в другой. Мне нужно что-то визуальное, чтобы помочь мне учиться, поэтому этот ответ является дополнением к другим уже здесь. Это немного более общий вопрос, чем первоначальный вопрос, но его можно адаптировать к работе.
Этот базовый пример работает так:
Идея состоит в том, чтобы передать строку из текстового поля в первом контроллере представления метке во втором контроллере представления.
Контроллер первого вида
Контроллер второго вида
Запомни
UITextField
иUILabel
.Источник
Как отправить данные через segue (swift) (учебник YouTube)
Смотрите также
View Controllers: передача данных вперед и передача данных назад (более полный ответ)
источник
Для Swift используйте это,
источник
Я реализовал библиотеку с категорией на UIViewController, которая упрощает эту операцию. По сути, вы устанавливаете параметры, которые хотите передать, в NSDictionary, связанном с элементом пользовательского интерфейса, который выполняет переход. Работает и с ручными переходами.
Например, вы можете сделать
для ручного перехода или создайте кнопку с переходом и используйте
Если контроллер представления назначения не совместим с ключом для кодирования значения ключа, ничего не происходит. Он также работает со значениями ключа (полезно для раскручивания сегментов). Проверьте это здесь https://github.com/stefanomondino/SMQuickSegue
источник
Мое решение похоже.
источник
Просто используйте эту функцию.
источник
Я использовал это решение, чтобы я мог сохранить вызов segue и передачу данных в одной и той же функции:
Вариант использования будет что-то вроде:
Мне кажется, что это работает, но я не уверен на 100%, что функции выполнения и подготовки всегда выполняются в одном потоке.
источник