установить одно текстовое значение представления на другой ярлык представления - PullRequest
2 голосов
/ 13 декабря 2010

У меня есть текстовое поле и кнопка При первом просмотре. Когда я нажимаю кнопку, происходит навигация по второму просмотру. При этом у меня есть одна метка.Мой вопрос: я хочу установить значение текстового поля для текста метки?

Плз, помогите мне!

Ответы [ 2 ]

5 голосов
/ 13 декабря 2010

Создавая ivar для ссылки на определенный тип, такой как метка или другой контроллер представления, вы соединяете вещи, которые не нужно соединять. Вместо этого вы можете сделать свой первый контроллер представления вкладок делегатом вашего второго контроллера представления вкладок. Так что сделайте что-то подобное в вашем делегате приложения.

OptionsViewController *optionsViewController = // ... get this from the tab view
FirsTabViewController *firstTabViewController = // ... same here

[optionsViewController setDelegate:firsTabViewController];

Это означает, что вам нужен ивар в вашем OptionsViewController:

@property (assign) id delegate;

Затем, когда любое событие, которое вы хотите вызвать, происходит в вашем контроллере представления параметров, посмотрите, может ли делегат ответить на селектор, который вы назвали. Например:

- (void)someEventHappenedLikeTyping:(id)sender;
{
if ([delegate respondsToSelector:@selector(setOptionsString:)]
    [delegate performSelector:@selector(setOptionsString:) withObject:[label text]];
}

Обратите внимание, что вы никогда не указывали какие-либо конкретные типы объектов. Вы просто проверяете, может ли делегат (который был объявлен как id) ответить на этот селектор. Если это возможно, он делает то, что ему говорят, и просто молчит.

Чтобы это работало, вам нужен ivar для optionsString в вашем FirstTabViewController, и поэтому он будет объявлен в заголовке как:

@property (copy) NSString *optionsString;

и затем @synthesize в .m. Это приводит к тому, что -setOptionsString становится допустимым селектором, который будет вызываться в методе -someEventHappenedLikeTyping.

Во всяком случае, теперь, если вам когда-нибудь понадобится изменить какой вид контроллера ссылается на какой, вам не нужно заходить в заголовок и изменять тип ссылочной таблицы ivar. Вам просто нужно внедрить селектор (кстати, это неформальный протокол) в контроллере представления, который является делегатом вашего контроллера представления параметров.

Просто пища для размышлений. Надеюсь, это поможет. В коде, который я добавил, можно выполнить дальнейшее расцепление, но опять-таки это может быть излишним для такой простой задачи. Дайте мне знать, если вам нужно разъяснение или вы хотите понять, что я имею в виду под дальнейшим разделением.

С уважением,

p.s. Иногда необходимость обмена данными между двумя контроллерами панели вкладок означает, что у вас есть недостаток дизайна. Если вы хотите сохранить настройки в окне параметров, просто позвоните

[[NSUserDefaults standardUserDefaults] setObject:[label text] forKey:@"option1"];
[[NSUserDefaults standardUserDefaults] synchronize];

Затем вы можете вытащить NSUserDefaults обратно на главную вкладку с помощью

NSString *option1 = [[NSUserDefaults standardUserDefaults] objectForKey:@"option1"];

// Делаем что-то с option1

Справочник по Как получить доступ к данным из одного представления в другое представление?

0 голосов
/ 13 декабря 2010

Вы можете создать одну глобальную переменную для вашего первого контроллера представления, чтобы сохранить значение текстового поля и просто создать ссылку на первый класс viewcontroller в вашем втором контроллере представления ... Затем вы можете получить доступ к переменной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...