2010-02-16 4 views
1

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

Когда мне нужно добавить новый 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 в приведенном выше примере). Любая помощь?

ответ

1
- (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 returns nil

+0

спасибо, NSClassFromString - это то, что мне нужно – Mike

1

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

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

+0

приложение получило множество экранов, с большим количеством графики, нарисованных дизайнерами, каждый экран требует некоторого ввода от пользователя ... не уверен, как это сделать, не используя много xib. Один контроллер, имеющий 3 xibs, является отличной идеей, никогда не думал об этом, спасибо – Mike

+1

Просто длинный снимок здесь, но если вы знаете точное количество контента, которое у вас будет на вашем приложении, возможно, вы сможете заполнить просмотры (или просмотреть прокрутки) программно. Если, однако, вы загружаете изображения (графики), которые лучше всего их хранят в другом месте, а затем применяете к UIImageView, входы могут быть закодированы и программно. Я до сих пор не думаю, что много xibs - это чистое решение (но тогда я не знаю вашего дела очень хорошо, возможно). –

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