-1
我設置了下面的Swift 2代碼,捕獲整個應用程序中的所有觸摸。它在觸摸發生和觸摸停止時發出警報。在UIApplication中捕獲觸及並在ViewController中調用導致錯誤的函數
我想訪問一個名爲myVC
當觸摸正在發生的另一個視圖控制器兩種功能,當他們已經停止,調用函數一個funcOne()
和工作的兩個funcTwo()
。但是,我不斷得到一個錯誤fatal error: unexpectedly found nil while unwrapping an Optional value
。似乎每當調用myVC
時,它都會導致錯誤。
我該如何實現在ViewController上調用一個沒有錯誤的函數,並取決於應用程序在Swift 2中接收或不接收任何觸摸事件的時間?
main.swift
文件:
import UIKit
UIApplicationMain(Process.argc, Process.unsafeArgv, nil, NSStringFromClass(AppDelegate))
UIApplication.swift
文件:
import UIKit
@objc(MyApplication)
class MyApplication: UIApplication {
var myVC: ViewController!
override func sendEvent(event: UIEvent) {
if event.type != .Touches {
super.sendEvent(event)
return
}
var touchesStarted = false
if let touches = event.allTouches() {
for touch in touches.enumerate() {
if touch.element.phase != .Cancelled && touch.element.phase != .Ended {
touchesStarted = true
break
}
}
}
if touchesStarted {
myVC.funcOne() // Call function one on ViewController
} else {
myVC.funcTwo() // Call function two on ViewController
}
super.sendEvent(event)
}
}
順便問一下,你在做什麼是一個非常糟糕的主意,這是完全沒有必要的。通過繼承UIWindow而不是UIApplication,您可以更安全地介入觸摸處理,甚至更好地通過在所有內容之前的不可見視圖在視圖控制器級別進行干預。 – matt
謝謝,@Matt。我如何設置myVC的變量爲一個值? – user4806509
我試過'UIWindow',但它不適用於所有手勢和觸摸組合。 'UIApplication'可以使用'print'來測試它。不過,我需要設置一個函數進入ViewController。 – user4806509