Objective-C: правильный метод для прохождения - PullRequest
5 голосов
/ 31 июля 2011

Как вы можете передать переменную среди методов?

У меня есть UITabBarController.

- (void)tabBarController:(UITabBarController *)tabBarController 
        didSelectViewController:(UIViewController *)viewController {
     NSLog(@"my ns string %@", viewController.tabBarItem.title);
}

Мне нужно установить переменную NSString, чтобы я мог получить к ней доступ, когда в этом событии указаны ячейки моей таблицы. Идея состоит в том, что содержимое таблицы зависит от заголовка вкладки.

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath

В других языках, с которыми я знаком, я всегда просто передаю переменные среди функций, или они являются переменными в классе. Я новичок в Objective-C и не знаю, как обращаться с переменными областями.

Я читал, что это можно сделать, создав класс, который используется исключительно для переменных. Это правильный способ сделать это? Совет очень ценится.

Ответы [ 5 ]

0 голосов
/ 15 ноября 2012

Похоже, на этот вопрос никогда не отвечали правильно. Ответ на ваш вопрос: вы можете объявить переменные как @property и передавать значения между контроллерами.

Например: -

Если вы хотите передать что-то viewController, объявите это как свойство в этом классе как

@property(nonatomic, retain) NSString *someValue;

и установите его как

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
     viewController.someValue = someValues;
}

Вы можете использовать это в классе viewController как,

NSLog(@"value is %@", self.someValue);

В вашем случае вы можете использовать self.tabbarItem.title непосредственно в вашем cellForRowAtIndexPath: методе.

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

Идея состоит в том, что содержимое таблицы зависит от заголовка вкладки.

Вы можете указать свойство tag, указанное в заголовке.Я думаю, что вы можете использовать:

//In some place or your UITabBarController
...
UITabBarItem *item;
...
item.tag = YOUR_DEFINED_VALUE;
...


- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
     switch(tabBarController.tabBar.selectedItem.tag) {
case YOUR_DEFINED_VALUE:
...
self.typeOfCell = CELL_TYPE;
[tableView reloadData];
...
}
}

UITabBarItem расширяется от UIBarItem , который имеет свойство 'tag'.

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

Приложения Objective-C в моем опыте получают немного нисходящий подход. Это немного параллельно, у вас есть иерархия представлений и иерархия контроллеров.

Иерархия представлений для iphone начинается с окна, затем переходит к первому подпредставлению, затем к последующим подпредставлениям.

Аналогом контроллера для окна является делегат приложения, который обычно создает первое представление controller . Оттуда у каждого (полноэкранного) представления есть контроллер, и они, как правило, создаются и настраиваются своими родительскими контроллерами представления.

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

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

Примечание. Следующий ответ выходит за рамки передачи значений между методами / контроллерами представления.

Если контроллер представления таблицы является одним из контроллеров представления в контроллере панели вкладок, вы можете получить заголовок панели вкладок, просто используя строку

NSString *title = self.tabbarItem.title;  
0 голосов
/ 31 июля 2011

Вы по-прежнему можете передавать переменные в Objective-C - обычно для контроллера представления, которому принадлежит таблица, вы должны передать ей это строковое значение.

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

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

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