Можно ли создавать разные файлы .xib с помощью одного класса iphone sdk

В моем приложении мне нужно загрузить разные .xib в разные ячейки tableView в зависимости от категории данных, которые я получаю от синтаксического анализатора. Я хотел спросить, можно ли создавать разные .xib, принадлежащие к одному классу, так как это уменьшит нагрузку, поскольку у меня почти 13 категорий, поэтому 13 файлов .xib.

Заранее спасибо.


person neha    schedule 19.05.2010    source источник
comment
Расскажите точную проблему, с которой вы столкнулись, чтобы получить правильное решение :)   -  person Manjunath    schedule 19.05.2010


Ответы (3)


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

NSString *nibName = @"DefaultNibName";
if (someCondition) {
     nibName = @"SomeOtherNib";
}

YourViewController *controller = [[YourViewController alloc] 
                                 initWithNibName:nibName bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
[controller release];
person RaYell    schedule 19.05.2010
comment
Нет, я имею в виду, могу ли я создать несколько .xibs с тем же классом, что и владелец? - person neha; 19.05.2010
comment
Это именно то, что вы делаете. Вы просто создаете стандартный контроллер с NIB, а затем копируете этот NIB несколько раз. Каждый из этих NIB будет иметь тот же контроллер представления, что и владелец, и, используя код, аналогичный тому, что я опубликовал, вы сможете выбрать тот, который вам нужен, по его имени. - person RaYell; 19.05.2010
comment
@RaYell: Если у перьев разные выходы, то? как ты справишься? - person Manjunath; 19.05.2010
comment
вы можете определить все выходы в контроллере представления и подключить только некоторые из них к вашему NIB. Честно говоря, я использовал этот метод только для двух NIB с разными версиями одной и той же страницы. Если вам нужна разная логика для каждого из этих NIB, имеющих несколько контроллеров представления, вероятно, будет проще всего. - person RaYell; 19.05.2010
comment
Два пера могут считаться приемлемыми, но думаю, что 10 или более пера имеют по крайней мере от 10 до 15 выходов и около 10 действий. Возможно ли это? Даже если у нас нет никаких розеток и действий, то мы должны поддерживать отдельный контроллер, не так ли? - person Manjunath; 19.05.2010
comment
Как я уже сказал, это имеет смысл только в том случае, если NIB похожи. Если они совершенно разные, то нет особого смысла иметь дело со всеми ими в одном контроллере представления, не так ли? - person RaYell; 19.05.2010
comment
Если перья похожи, то зачем они вам нужны? Вместо этого будет достаточно только одного пера, верно? - person Manjunath; 20.05.2010
comment
Не всегда. Представьте, что ваше приложение поддерживает 10 языков. Содержимое каждого из NIB одинаково, но макет будет немного отличаться. Конечно, вы также можете создать один NIB, добавить выходы для всего и изменить языковое содержимое в вашем контроллере представления, но это не очень удобно, и вы никогда не будете уверены, что переведенные тексты будут хорошо выглядеть на разных языках. Так что в этом случае лучше иметь несколько NIB, по одному для каждого языка. - person RaYell; 20.05.2010
comment
о Боже!!! Надеюсь, вы знаете локализацию! Если нет, то читайте про локализацию :-) - person Manjunath; 20.05.2010

@"Я хотел спросить, можно ли создавать разные .xib, принадлежащие одному и тому же классу, так как это уменьшит нагрузку, поскольку у меня почти 13 категорий, поэтому 13 файлов .xib."

Файлы xib не загружают память, если они не загружены, и в этом случае создается объект-владелец файла. Имея это в виду, не имеет значения, сколько пера у вас есть для вашего класса, для объекта каждого класса viewController загружается соответствующий xib. Таким образом, в конечном итоге вы должны ввести условие проверки, как указано RaYell, было бы лучше ввести эту проверку, когда вы создаете объект viewController, вместо проверки условия для загрузки соответствующего xib.

Не беспокойтесь о создании 13 viewController'ов, вам будет проще внести изменения в ваш проект позже, если будут изменения в требованиях. Вы оцените такой подход.

Если вы создаете только один подкласс UIViewController и загружаете один из 13 xib на основе какого-либо условия, скажем, возникает требование, чтобы вы добавили кнопку/метку/текстовое поле ТОЛЬКО в 13-й xib и нуждались в его ссылке в вашем классе viewController. Как бы вы этого достигли, вы поддерживаете IBOutlet в общем классе viewController и вводите проверку if-else, чтобы увидеть, относится ли он к 13-й категории. Код становится неопрятным с большим количеством условий if else.

person Raj Pawan Gumdal    schedule 19.05.2010
comment
Кроме того, возможно ли создать несколько представлений в одном .xib? - person neha; 19.05.2010

Но как вы будете делать соединения (выходы), которые будут разными в разных файлах .xib?

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

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

person Manjunath    schedule 19.05.2010
comment
Можно ли создать несколько представлений в одном .xib? - person neha; 19.05.2010
comment
да, вы можете создать любое количество просмотров. Они будут в виде розеток в контроллере единого представления. пример: скажем, если у вас есть 5 представлений, ваш контроллер должен иметь пять выходов, чтобы подключиться к ним. Но скажи мне одну вещь, ты так заморачиваешься с созданием 13 вью-контроллеров и если ты загрузишь 13 вьюшек в один ниб, то что будет с твоей памятью????? - person Manjunath; 19.05.2010
comment
Как вы думаете, что является лучшим вариантом с точки зрения производительности и использования памяти: создание 13 контроллеров представлений или 13 представлений в одном nib и загрузка их по мере необходимости? - person neha; 19.05.2010
comment
Когда вы загружаете перо, все ваши объекты в перо будут созданы. Это означает, что все ваши 13 представлений будут созданы. Так что лучше создайте 13 контроллеров представления в зависимости от необходимости. перед созданием следующего контроллера представления вы отпускаете предыдущий. Таким образом, у вас будет только один контроллер представления, и он даст хорошую производительность, а также сохранит память :-) подумайте об этом. - person Manjunath; 19.05.2010