UINavigationController право использования - PullRequest
1 голос
/ 16 февраля 2010

Я реализовал UINavigationController в своем приложении для iphone в качестве основного интерфейса навигации.

Когда мне нужно добавить новый xib в мой стек UINavigationController, я должен написать новый метод, подобный этому (пример для ContactsView.xib):

- (void) switchToContactsView
{
   // lazy load
   if (self.contactsViewController == nil)
   {
      ContactsViewController *contactsController = [[ContactsViewController alloc]
                                     initWithNibName:@"ContactsView" bundle:nil];
      self.contactsViewController = contactsController;
      [contactsController release];
   }
   [navigationController pushViewController:contactsViewController animated:YES];  
}

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

Есть ли более эффективный способ сделать это? Например, можно создать какой-то один метод, который принимает параметры (имя подкласса xib и uiviewcontroller), поэтому я могу просто вызвать его с этими параметрами, чтобы загрузить новый xib и переключиться на него. Проблема в том, что я не знаю, как передать имя класса методу (например, класс ContactsViewController в приведенном выше примере). Любая помощь?

Ответы [ 2 ]

1 голос
/ 16 февраля 2010

Есть ли причина, по которой у вас есть много сибс в вашем проекте? Прочитайте рекомендации по интерфейсу яблок. Многие новички в разработке для iPhone неправильно понимают причину, лежащую в основе некоторых элементов интерфейса. Кроме того, если вам нужно много xibs, но все они имеют одинаковые функции, рассмотрите возможность связывания xibs с одним и тем же файлом класса, поэтому один контроллер, имеющий 3 xibs и т. Д., Таким образом, вам потребуется только укажите правильный xib, а не копируйте весь метод.

Просто подумайте, но, пожалуйста, объясните причину, по которой так много XIBS, какова цель вашего приложения?

1 голос
/ 16 февраля 2010
- (void) switchToAViewController: (NSString *)vCName: (NSString *)nibName
{
   // lazy load
   if (self.toBePushedViewController == nil)
   {
      //Assuming all VCs are subclasses of UIViewController
      UIViewController *tempViewController = [[NSClassFromString(vCName) alloc]
                                     initWithNibName:nibName bundle:nil];
      self.toBePushedViewController = tempViewController;
      [tempViewController release];
   }

[navigationController pushViewController:self.toBePushedViewController animated:YES]; 
}

Также см. NSClassFromString возвращает ноль

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