Есть ли способ "создать" пользовательский UIView в раскадровке и использовать в нескольких ViewControllers без добавления какого-либо конкретного контроллера?

Мне нужен пользовательский UIView, который должен использоваться в нескольких разных ViewControllers. Обычно, когда я создаю пользовательский UIView, я перетаскиваю экземпляр UIView в свой ViewController в раскадровке, создаю подкласс UIView и указываю на этот подкласс в Identity Inspector для представления. Оттуда я бы подключил UI-объекты как выходы к заголовочному файлу подкласса.

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

В Storyboard единственными объектами, которым я могу перетащить "за пределы ViewController", являются другие ViewControllers.

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

Я также думал об этом, добавив 'phantom' UIViewController, содержащий мой пользовательский вид; проектируя его там, но инстанцируйте его от других контроллеров, но это звучит так хакерски..

Я хотел бы сделать это с помощью UITableViewCell, но, я думаю, это будет иметь то же самое решение.

Ответ 1

Для вашего UIView вы должны создать пользовательский UIViewController в своем раскадровке и создать экземпляр контроллера представления для доступа к представлению:

MyViewController *myViewController = [self.storyboard  instantiateViewControllerWithIdentifier:@"MyViewController"];
// Access the view using "myViewController.view"

Это очень распространенная практика в iOS, поскольку были представлены раскадровки. Если вы используете несколько раскадровки, вы должны создать новый экземпляр UIStoryBoard с помощью:

UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"StoryboardName" bundle:nil];

И затем создайте экземпляр контроллера представления с помощью этого экземпляра раскадровки.

Если вы хотите использовать UIView исключительно, вы должны создать файл .xib, то есть формат olden days. Чтобы создать пользовательский UITableViewCell, я бы абсолютно использовал файл .xib. Последний вариант - создать UIView программно, который можно вызвать из любого места в вашем приложении. В зависимости от сложности этого представления это может быть допустимым вариантом.

Ответ 2

Я не думаю, что вы можете создать пользовательский UIView в раскадровке. Таким образом, в этом случае вы можете создать xib файл для этого пользовательского представления. Затем, когда вы хотите использовать это представление, просто используйте

UIView *customView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0]; 

чтобы получить это представление.