2016-06-29 2 views
0

Я пытаюсь установить объект окна на ноль всякий раз, когда видео в веб-представлении пытается стать полноэкранным, потому что я не хочу, чтобы он захватывал экран. У меня есть это в мой контроллер: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") 
} 

Однако это нарушает мою сборку. enter image description here

== 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.

+5

Это свойство только объект, который отправил уведомление. Даже если вы можете установить «notification.object» в nil, вы просто удаляете ссылку из объекта уведомления, не затрагивая объект каким-либо образом. Это уведомление просто сообщает вам, что ваше ключевое окно больше не является ключевым окном. Вы не можете использовать его, чтобы каким-либо образом повлиять на новое окно ключа. – Paulw11

+0

есть ли способ предотвратить захват полноэкранного видео? что, если я сделал 'let win = notification.object как! UIWindow', а затем 'win.hidden = true'? – Edmund

+1

Нет, потому что уведомление не является окном. Когда вы получаете это уведомление, видео уже «захвачено» - это * did * resignKeyNotification - прошедшее время. Возможно, если вы объясните, как видео запускается/представлено, кто-то может помочь, но уведомление не поможет вам. – Paulw11

ответ

0

Попробуйте (это на Swift 3):

NotificationCenter.default().addObserver(
    forName: NSNotification.Name.UIWindowDidResignKey, 
    object: view.window, 
    queue: nil 
) { notification in 
    do { 
     try notification.object?.remove() 
    } catch { 

    } 
    print("Video is now fullscreen") 
} 
+0

это не сработало, я обновил свой вопрос с помощью этого кода и возникшей ошибки – Edmund

Смежные вопросы