вызов функций в других классах при нажатии UIButton - PullRequest
0 голосов
/ 17 ноября 2009

Я использую UITabBarController для отслеживания различных представлений для приложения. В одном представлении, «контролере викторины», у меня есть пользователь, выбирающий числа из сегментированных элементов управления, и затем я сохраняю их ответы в целочисленном массиве. Внизу находится кнопка «Отправить», которая при нажатии должна вызывать функцию в другом представлении для отображения результатов с помощью «контроллера результатов». Мой вопрос: как мне обрабатывать методы класса, чтобы позволить анализировать результаты и устанавливать UILabels в «контроллере результатов» при вызове «контроллером викторины»?

Мой код для нажатия кнопки отправки выглядит так:

[ResultViewController calculateAndDisplayScores];

// swtich to results view
mainDelegate.tabBarController.selectedIndex = 2;

где "ResultViewController" - это имя моего "контроллера результатов". Когда я делаю это, ResultViewController выдает мне ошибку, которая, как мне кажется, говорит, что я не могу установить свойство текста UILabel в методе класса.

1 Ответ

0 голосов
/ 17 ноября 2009

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

Самый простой и уродливый способ сделать это, основываясь на опубликованном вами коде:

[(ResultViewController*)[mainDelegate.tabBarController.viewControllers objectAtIndex:2] calculateAndDisplayScores];

// switch to results view
mainDelegate.tabBarController.selectedIndex = 2;

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

(Ради аргумента предположим, что это действительно метод класса. Классы в Objective-C на самом деле не имеют состояния, поэтому как метод класса будет сохранять результаты или обновлять ваш интерфейс?)

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