#iphone #ios #ipad #interface-builder
#iPhone #iOS #iPad #interface-builder
Вопрос:
У меня есть пользовательский вид панели инструментов, который я сохраняю в его собственном файле nib. Я хочу использовать эту панель инструментов в других nibs. Возможно ли просто создать какое-либо представление в качестве вложенного представления в основном файле nib и загрузить в него перо панели инструментов? Предпочтительно в interface Builder.
Спасибо
Ответ №1:
присутствует ли пользовательская панель инструментов в отдельном файле nib? Если да, то вы можете загрузить его независимо в любое время с помощью
NSArray *arr = [[NSBundle mainBundle] loadNibnamed:@"customToolBarNibName" owner:... options:...];
UIView *rootView = [arr objectAtIndex: 0];
Комментарии:
1. Панель инструментов встроена в отдельный файл nib. Класс панели инструментов — CustomUIToolbar. Все кнопки подключены к классу outlets CustomUIToolbar. И у меня есть протокол делегирования для любого контроллера представления, использующего панель инструментов. В идеале я хотел бы, чтобы это был плагин Interface Builder, который, по-видимому, больше не поддерживается. Я хочу иметь возможность перевести эту панель инструментов в другое представление в Interface Builder, чтобы я мог отслеживать дизайн.
2. Это отлично работает, за исключением того, что по какой-то причине, несмотря на фрейм, говорящий frame = (0 0; 1024 54);, панель инструментов заполняет весь экран. Вот вывод NSLog объекта. <CDCToolbar_iPad: 0x4e36b50; базовый класс = UIToolbar; рамка = (0 0; 1024 54); непрозрачный = НЕТ; авторазмер = W BM; слой = <CALayer: 0x4e370b0>>
Ответ №2:
Похоже, у вас есть единственное представление в вашем файле nib, и вы хотите иметь возможность загружать экземпляр этого представления в разные места вашего приложения.
Вот что ты делаешь:
Сначала в файле nib измените класс владельца файла на UIViewController и установите свой пользовательский вид в качестве свойства view владельца файла.
Затем в контроллере представления, где вы хотите использовать экземпляр вашего пользовательского представления, выполните следующие действия:
UIViewController *vc = [[UIViewController alloc] initWithNibName:@"YourCustomNib" bundle:nil];
UIView *yourCustomView = vc.view;
[vc release];
Я знаю, это кажется немного хакерским, но последнее, что я слышал, это на самом деле один из «правильных» способов загрузки отдельного представления из nib. Я использую этот метод, когда у меня есть пользовательские ячейки tableview в nib.
Комментарии:
1. Единственное, что есть в моем файле nib, — это панель инструментов с кнопками. Я создал это представление контроллера представления. Затем в nib, в который мне нужно включить это, у меня было пустое представление, на которое я держу ссылку. Я присвоил контроллеру представления имя nib, как указано выше, и установил self.toolbar для представления пользовательской панели инструментов. Оно не отображается. Это в viewDidLoad.
2. Я добился этого, добавив к нему [self.view addSubview: yourCustomView];. Это означает, что я не могу рассчитывать на Interface Builder для фрейма. К счастью, это панель инструментов, которая всегда будет иметь значение 0,0. Так что ничего страшного.
3. Я думаю, я понимаю, что вы имеете в виду … вы не можете ссылаться на представление панели инструментов из другого интерфейса. Вы должны вставить его в код. Обычно я делаю то же самое: использую представление-заполнитель с правильной рамкой, а затем использую это в ViewController для позиционирования пользовательского представления.