Моя цель состоит в том, чтобы иметь подкласс UIView
(давайте назовем его infoView
), разработанный в его собственном XIB, чтобы я мог представить его во многих UIViewController
.
Проблема:
До сих пор, когда я добавлял UIView
к UIViewController
, мне всегда приходилось делать UIViewController
владельцем файла .xib * UIView
файла, чтобы загрузить представление с чем-то вроде:
...
//this is inside the calling UIViewController's method
// InfoView *infoView is ivar and a subclass of UIView
infoView = nil;
NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:@"InfoView"
owner:self options:nil];
for (id object in bundle) {
if ([object isKindOfClass:[InfoView class]])
infoView = (InfoView *)object;
}
[[self view] addSubview:infoView];
...
Но я хочу использовать один и тот же UIView
во многих различных UIViewController
, поэтому я на самом деле не хочу владельца файла, за исключением, может быть, самого класса. В вопрос Томаса он сам устанавливал UIView
в качестве владельца файла, но безуспешно.
В ответах я нашел решение установить для владельца файла значение nil. Для этого мне пришлось добавить все вызывающие объекты UIViewController
из библиотеки объектов Interface Builder в файл InfoView.xib и соединить их с их infoView
выходами.
Но это не так. Так что здесь я хотел бы собрать решения для
инкапсулируйте UIView
вместе с его xib-файлом, чтобы использовать его во многих различных контроллерах представления. Как вы, ребята, справляетесь с этим?
Спасибо за любую помощь.
EDIT:
infoView
- это что-то вроде наложения, которое появляется, когда пользователь нажимает кнопку на одном из контроллеров представления. Это НЕ «основной» вид контроллеров View. Это дает подробную информацию о представлении его контроллера представления superviews и исчезнет впоследствии. Я только заполню infoView
разным содержимым, выкинул все вызывающие контроллеры вида.