Поймите, что вы смешиваете некоторые понятия, которые не обязательно связаны: избегайте дублирования кода и синглтонов.
Википедия говорит это о одиночках:
В программной инженерии, одноэлементный шаблон является шаблоном, который ограничивает создание экземпляра класса к одному объекту. Это полезно, когда необходим один объект для координации действий в системе. Концепция иногда обобщается на системы, которые работают более эффективно, когда существует только один объект, или которые ограничивают создание экземпляра определенным количеством объектов. Термин исходит из математической концепции одноэлементности.
Самая важная характеристика синглтона (по моему скромному мнению) заключается в том, что объект создается только один раз, и каждое отдельное место в вашем приложении будет использовать один и тот же экземпляр. Ну, чтобы использовать функцию поиска везде и избегать дублированного кода, вам не нужно, чтобы поисковое представление создавалось только один раз, возможно, данные, которые идут с ним, , но не само представление.
Два лучших способов достижения этой цели:
1 - Вы можете создать ViewController с вашим поиском и просто встраивать это на другие представления с помощью контейнера View, вы можете использовать блоки или протокол делегата для обмена данными между контроллер и представление, которое его внедряет.
2 - Вы можете создать родительский класс ViewController, который будет включать панель поиска, такую как SearchViewController, и все остальные viewControllers, которые нуждаются в одной и той же функции, будут унаследованы от нее.
Singleton может быть полезен, если вы планируете совместно использовать одни и те же данные поиска и текст между всеми ViewControllers приложения, но это будет одноэлемент только с этой информацией, UISearchBar и все другие элементы представления не должны быть часть синглтона.
Вы можете найти: «У Views может быть только один супервизор. Если в представлении уже есть супервизор, и этот вид не является получателем, этот метод удаляет предыдущий супервизор, прежде чем сделать получателю новый супервизор». в 'addSubview' справки класса UIView'. – KudoCC