К сожалению, нет способа разделить представление между двумя разными суперпредставлениями или двумя разными контроллерами представления (каждый контроллер представления имеет корневое представление).
https://developer.apple.com/documentation/uikit/uiview/1622616-addsubview
Представления могут иметь только одно суперпредставление. Если представление уже имеет суперпредставление и это представление не является получателем, этот метод удаляет предыдущее суперпредставление перед тем, как сделать получателя его новым суперпредставлением.
Но вы можете симулировать то же поведение, создав общую модель данных, которая содержит соответствующие свойства для отображения идентичного представления на разных контроллерах представления.
struct ViewModel {
let frame: CGRect
let backgroundColor: UIColor
// other properties that identify view state
}
class FirstViewController: UIViewController {
var model: ViewModel?
@IBOutlet weak var customView: UIView! // view that you want to customize from ViewModel. You can create it programmatically.
override func viewDidLoad() {
super.viewDidLoad()
guard let viewModel = model else { return }
customView.frame = viewModel.frame
customView.backgroundColor = viewModel.backgroundColor
}
}
class SecondViewController: UIViewController {
var model: ViewModel?
@IBOutlet weak var customView: UIView! // view that you want to customize from ViewModel. You can create it programmatically.
override func viewDidLoad() {
super.viewDidLoad()
guard let viewModel = model else { return }
customView.frame = viewModel.frame
customView.backgroundColor = viewModel.backgroundColor
}
}
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
// Hierarchy of view controllers is created by storyboard (UITabBarController contains FirstViewController & SecondViewController)
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let tabBarController = mainStoryboard.instantiateInitialViewController() as! UITabBarController
let viewModel = ViewModel(frame: CGRect(x: 10, y: 10, width: 20, height: 20), backgroundColor: UIColor.cyan)
(tabBarController.viewControllers[0] as! FirstViewController).model = viewModel
(tabBarController.viewControllers[1] as! SecondViewController).model = viewModel
window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = tabBarController
return true
}
}