【发布时间】:2018-08-03 20:15:50
【问题描述】:
我有一个精简的、基于代码的测试应用程序(不是Storyboard),它有:
-
UIWindow对象 - ViewController,及其主视图
- 顶部有一个
UIView对象。 -
为了测试哪个对象是第一响应者,我在 tochesBegan 中评估,在 topView 内如下,但所有项目都响应 false。响应链正在工作,因为检测到触摸(在 topView 和主控制器的视图中。
这是应用程序的精简版。鉴于这不是一个简单的视图-子视图层次结构,我不使用递归函数。
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow()
window?.rootViewController = ViewController()
window?.makeKeyAndVisible()
return true
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
let topView = View()
self.view.addSubview(topView)
}
}
class View: UIView {
convenience init() {
self.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
self.backgroundColor = UIColor.yellow
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let window = (UIApplication.shared).delegate?.window as? UIWindow
let viewController = window?.rootViewController
let mainView = viewController?.view
print("Window?: \(window!.isFirstResponder)")
print("View Controller?: \(viewController!.isFirstResponder)")
print("Main View?: \(mainView!.isFirstResponder)")
for view in (mainView?.subviews)! {
print("Any View?: \(view.isFirstResponder)")
}
}
}
所有评估都返回 false。我在这里做错了吗?
问候... e
【问题讨论】:
标签: ios swift uiresponder