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

#iphone #cocoa-touch #uitableview

#iPhone #cocoa-touch #uitableview

Вопрос:

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

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

Комментарии:

1. Укажите точную проблему, с которой вы столкнулись, чтобы получить правильное решение 🙂

Ответ №1:

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

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

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

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

Комментарии:

1. Кроме того, возможно ли создавать несколько представлений в одном .xib?

Ответ №2:

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

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

YourViewController *controller = [[YourViewController alloc] 
                                 initWithNibName:nibName bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
[controller release];
  

Комментарии:

1. Нет, я имею в виду, могу ли я создать несколько файлов .xibs с тем же классом, что и owner?

2. Это именно то, что вы делаете. Вы просто создаете стандартный контроллер с помощью NIB, а затем копируете это перо несколько раз. Каждый из этих NIBS будет иметь тот же контроллер представления, что и owner, и, используя код, аналогичный тому, что я опубликовал, вы сможете выбрать тот, который вы хотите, по его имени.

3. @RaYell: Если у nibs разные выходы, то? как вы будете обращаться?

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

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

Ответ №3:

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

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

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

Комментарии:

1. Возможно ли создать несколько представлений в одном .xib?

2. да, вы можете создавать любое количество просмотров. Они будут в виде выходов в контроллере single view. пример: скажем, если у вас есть 5 представлений, то ваш контроллер должен иметь пять выходов для подключения к ним. Но скажите мне одну вещь, вы так беспокоитесь о создании 13 контроллеров просмотра, и если вы загрузите 13 просмотров в один файл, то что произойдет с вашей памятью?????

3. Как вы думаете, какой вариант лучше с точки зрения производительности и использования памяти: создать 13 контроллеров просмотра или 13 представлений в одном файле и загружать их по мере необходимости?

4. При загрузке nib будут созданы все ваши объекты в nib. Означает, что будут созданы все ваши 13 просмотров. Так что лучше вам создать 13 контроллеров просмотра на основе потребностей. перед созданием следующего контроллера просмотра вы освобождаете предыдущий. Таким образом, у вас будет работать только один контроллер просмотра, и это обеспечит хорошую производительность, а также сэкономит память 🙂 подумайте об этом.