【问题标题】:Swift + iOS: How to set notification.object to nil?Swift + iOS:如何将 notification.object 设置为 nil?
【发布时间】:2016-06-29 03:47:53
【问题描述】:

每当网络视图中的视频尝试变成全屏时,我都会尝试将窗口对象设置为 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?

提前致谢。

== 更新 ==

正如 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")
}

但是,这破坏了我的构建。

== 更新 2 ==

我也按照 Ozgur 的建议尝试了这个:

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")
}

但当我在 web 视图中单击 youtube 视频时,视频仍然全屏显示。

【问题讨论】:

  • 该属性只是发送通知的对象。即使您可以将 notification.object 设置为 nil,您也只会从通知对象中删除引用,而不会以任何方式影响该对象。此通知只是告诉您您的关键窗口不再是关键窗口。你不能用它以任何方式影响新的关键窗口
  • 有没有办法阻止全屏视频接管?如果我先let win = notification.object as! UIWindow 然后win.hidden = true 呢?
  • 否,因为通知不是窗口。当您收到此通知时,视频已经“接管” - 这是 didresignKeyNotification - 过去时。如果您解释了视频是如何被触发/呈现的,也许有人可以提供帮助,但通知对您没有帮助。
  • 视频将按照问题中的说明在网络视图中显示。就像访问 youtube 并点击其中一个视频一样,它会以全屏模式播放
  • 为什么要在观察通知时将通知设置为nil?发件人在发布之前为您准备好包裹,如果您可以在观察者中本地更改通知的详细信息,您可以什么都没有。

标签: ios swift


【解决方案1】:

试试这个(它在 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")
}

【讨论】:

  • 它不起作用,我用该代码和出现的错误更新了我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
相关资源
最近更新 更多