Есть ли способ "создать" пользовательский 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];
чтобы получить это представление.