Я пытаюсь установить объект окна на ноль всякий раз, когда видео в веб-представлении пытается стать полноэкранным, потому что я не хочу, чтобы он захватывал экран. У меня есть это в мой контроллер:Swift + iOS: Как установить notification.object на nil?
NSNotificationCenter.defaultCenter().addObserverForName(
UIWindowDidResignKeyNotification,
object: self.view.window,
queue: nil
) { notification in
notification.object = nil // <------ doesn't work because it's read only
print("Video is now fullscreen")
}
Однако object
свойство только для чтения. Можно ли установить его на нуль? Или будет другой способ перехватить видео, которое должно быть полноэкранным, и извлечь из него видео-URL?
Заранее спасибо.
== UPDATE ==
Как было предложено Altimir, я попытался это: (Swift 2)
NSNotificationCenter.defaultCenter().addObserverForName(
UIWindowDidResignKeyNotification,
object: self.view.window,
queue: nil
) { notification in
do {
try notification.object?.remove()
} catch {
print("failed")
}
print("Video is now fullscreen")
}
Однако это нарушает мою сборку.
== UPDATE 2 ==
Я попытался это, а также за предложение Özgür в:
NSNotificationCenter.defaultCenter().addObserverForName(
UIWindowDidResignKeyNotification,
object: self.view.window,
queue: nil
) { notification in
do {
try NSNotificationCenter.defaultCenter().removeObserver(self)
print("success")
} catch {
print("failed")
}
print("Video is now fullscreen")
}
но видео все равно пошел на весь экран, когда я нажал Видеосервис YouTube в WebView.
Это свойство только объект, который отправил уведомление. Даже если вы можете установить «notification.object» в nil, вы просто удаляете ссылку из объекта уведомления, не затрагивая объект каким-либо образом. Это уведомление просто сообщает вам, что ваше ключевое окно больше не является ключевым окном. Вы не можете использовать его, чтобы каким-либо образом повлиять на новое окно ключа. – Paulw11
есть ли способ предотвратить захват полноэкранного видео? что, если я сделал 'let win = notification.object как! UIWindow', а затем 'win.hidden = true'? – Edmund
Нет, потому что уведомление не является окном. Когда вы получаете это уведомление, видео уже «захвачено» - это * did * resignKeyNotification - прошедшее время. Возможно, если вы объясните, как видео запускается/представлено, кто-то может помочь, но уведомление не поможет вам. – Paulw11