2011-07-31 15 views
5

Как вы можете передавать переменную среди методов?Цель-C: правильный метод прохождения

У меня есть 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, и я не уверен, как справляться с областями переменных.

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

+1

Я думаю, что объектив-c сильно сражается с типом кода, который вы пытаетесь сделать, он очень основан на MVC, а информация распространяется сверху вниз более или менее, по существу контроллер панели вкладок должен передавать строку, (или, что более важно, минимальное количество информации, необходимой для внешней информации), тогда контроллер представления должен выполнить свою собственную настройку на основе информации, переданной в. См. сеттеры/получатели/аксессоры для получения дополнительной информации о том, как передавать информацию. –

ответ

0

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

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

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

0

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

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

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

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

0

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

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

NSString *title = self.tabbarItem.title; 
0

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

Вы можете использовать свойство '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, который имеет свойство «тега».

0

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

Для экс: -

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

@property(nonatomic, retain) NSString *someValue; 

и установить его в качестве,

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

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

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

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

Смежные вопросы