Невозможно взаимодействовать с UIView, добавленным в Window - PullRequest
0 голосов
/ 11 февраля 2020

Я добавляю вид в окно с этой целью- c код:

  // Main Storyboard
  UIStoryboard *mainStoryBoard = [UIStoryboard  storyboardWithName:@"Main" bundle: nil];

  // View controller with the view to add
  UIViewController *vc = [mainStoryBoard instantiateViewControllerWithIdentifier:@"SomeViewController"];

  // Find the topmost window
  UIWindow *topWindow = [[[UIApplication sharedApplication].windows sortedArrayUsingComparator:^NSComparisonResult(UIWindow *win1, UIWindow *win2) {
   return win1.windowLevel < win2.windowLevel || !win1.isOpaque;
  }] lastObject];

  // Add the view to the window
  [topWindow addSubview:vc.view];

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

// Get topmost window (Should be UIWindow)
let topWindow = UIApplication.shared.windows.sorted {
  (win1, win2) in
  return win1.windowLevel < win2.windowLevel || !win1.isOpaque
}.last

// Force view to prepare to disappear
self.viewWillDisappear(true)

// Send the view to the back
topWindow?.sendSubviewToBack(view)

Это структура моих представлений после выполнения кода target- c. Выбранный вид - это тот, который был добавлен:

Screenshot of view hierarchy

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

1 Ответ

0 голосов
/ 11 февраля 2020

Я решил проблему, полностью заменив контроллер вида root, а не просто добавив его представление в качестве подпредставления. Проблема была в том, что @DonMag указал, что я добавляю подпредставление без его контроллера вида Я нашел этот вопрос о замене контроллера вида root и использовал его в качестве основы для своих изменений. Если кто-то хочет предоставить законченное решение, которое не требует замены контроллера представления root, я приму это вместо этого.

...