Xcode 4.2 и раскадровка, как передавать данные между представлениями?Ошибка существующего кода - PullRequest
2 голосов
/ 12 марта 2012

Я пытаюсь научиться передавать данные между представлениями.Скажем, установите метку во втором представлении из текста, введенного в текстовое поле в первом представлении.Я в основном пытался создать строку во втором представлении, а затем при переключении с первого представления на второе я установил строку во втором представлении.Затем, когда второе представление загружает его, устанавливает текст метки в той же строке.Я NSLog прямо до и после перехода, до его штрафа, но когда второй вид загружает его, строка стирается.Я не уверен, почему это не работает.Вот мой проект: http://www.mediafire.com/?83s88z5d06hhqb5

Спасибо!

-Shredder2794

Ответы [ 6 ]

2 голосов
/ 13 марта 2012

Из моей книги (http://www.apeth.com/iOSBook/ch19.html#_storyboards):

До того, как будет выполнен переход, отправляется контроллер исходного представления prepareForSegue:sender:. Контроллер представления может выяснить, какой запрос запускается, исследуя идентификатор и назначение segue и targetViewController назначениясвойствами, а отправитель - это объект интерфейса, который был задействован для вызова перехода (или, если performSegueWithIdentifier:sender: был вызван в коде, любой объект был предоставлен в качестве аргумента sender:). Это момент, когда контроллер представления источникаи контроллер представления назначения встречается, таким образом, контроллер представления источника может выполнять конфигурации на контроллере представления назначения, передавать ему данные и т. д.

(Конечно, другое решение - «не использовать раскадровку»).Затем первый контроллер представления создает второй и может тут же передать ему данные.)

Обратная проблема гораздо сложнее: посмотрите на шаблон приложения-утилиты для примера использования шаблона делегата.

1 голос
/ 01 августа 2013

StoryBoards - это готовые вещи, в которых вы можете уменьшить объем написанного кода. Рассмотрите контроллер A & B на раскадровке. Теперь для передачи данных из A в B вы можете связать их с именем segue, его идентификатором, а затем вы можете использовать методы делегата в A как:

// Этот метод вызывается перед переходом от A к B.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    if ([[segue identifier] isEqualToString:@"THE IDENTIFIER YOU NAMED"])
    {

        id *objectOfController_B  = [segue destinationViewController];.
        objectOfController_B.lblTextDisplayOfA = //Something...
    }
}

Теперь Вы можете явно перевести его, используя кнопку в контроллере A.

- (IBAction)buttonPressed:(id)sender
{
    [self performSegueWithIdentifier:@"THE IDENTIFIER YOU NAMED" sender:sender];
}

Так что, я думаю, вы можете попробовать поэкспериментировать с этим, и вы поймете, как и когда происходит переход с segue.

Надеюсь, это поможет.

0 голосов
/ 31 июля 2013

Я потратил «бесчисленные часы», пытаясь найти способ передать данные и понять делегатов без понимания и с очень небольшим успехом. В этом видео было то, чего не делали все остальные ссылки, которые я проверял: сделать его как можно более простым, четко показывая, что нужно. Большое спасибо, мистер Роб Смайт. http://www.youtube.com/watch?v=XZWT0IV8FrI

0 голосов
/ 13 марта 2012

Я задавал более или менее тот же вопрос несколько недель / месяц назад.были некоторые очень хорошие ответы, особенно один из zoul, который создал демонстрационный проект, который покажет вам, как создать приложение фабричного шаблона, которое обеспечит представления необходимыми объектами.

мой вопрос можно найтиздесь: iOS: инициализировать объект при запуске приложения для всех контроллеров, чтобы использовать и взглянуть на ответ из 'zoul'.это помогло мне справиться с этой проблемой =)

удачи в этом =) Себастьян

0 голосов
/ 13 марта 2012

Кажется, есть несколько вещей, которые нужно объяснить.Я думаю, что проработка нескольких уроков даст вам ответы, которые вам нужны.Смотри http://www.raywenderlich.com/tutorials

0 голосов
/ 13 марта 2012

Посмотрите на это: http://iosdevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

Шаблон делегата - это обычный способ достичь того, что вы пытаетесь сделать.

...