Ich habe den folgenden Swift 2-Code eingerichtet, der alle Berührungen über die gesamte App erfasst. Es warnt, wenn Berührungen auftreten und Berührungen aufgehört haben.Erfassen von Berührungen in UIApplication und Aufruf einer Funktion in ViewController, was zu einem Fehler führt
Ich möchte auf zwei Funktionen in einem anderen Ansichtscontroller namens myVC
zugreifen, wenn Berührungen auftreten und wenn sie aufgehört haben, Funktion funcOne()
aufrufen und Funktion zwei funcTwo()
. Allerdings bekomme ich ständig einen Fehler fatal error: unexpectedly found nil while unwrapping an Optional value
. Es scheint, wenn myVC
aufgerufen wird, verursacht es Fehler.
Wie kann ich erreichen, dass eine Funktion auf dem ViewController ohne Fehler aufgerufen wird und je nachdem, ob die App in Swift 2 Touch-Ereignisse empfängt oder nicht empfängt?
main.swift
Datei:
import UIKit
UIApplicationMain(Process.argc, Process.unsafeArgv, nil, NSStringFromClass(AppDelegate))
UIApplication.swift
Datei:
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)
}
}
By the way, was Sie tun, ist eine wirklich schlechte Idee, und es ist völlig unnötig. Sie könnten sicherer in die Berührbehandlung eingreifen, indem Sie UIWindow anstelle von UIApplication abzweigen oder sogar auf der Ebene des Ansichtscontrollers durch eine unsichtbare Ansicht vor allem eingreifen. – matt
Danke, @Matt. Wie kann ich eine Variable für myVC auf einen Wert setzen? – user4806509
Ich habe 'UIWindow' versucht, aber es funktioniert nicht für alle Gesten und Berührungen zusammen. 'UIApplication' funktioniert jedoch mit' print' um es zu testen. Allerdings muss ich eine Funktion im ViewController einstellen. – user4806509