选择器找不到实例方法
Selector can't find instance method
我正在尝试在我的视图控制器中将方法注册为 UISwipeGestureRecognizer
的操作。目标视图是我使用 UIView
子类构建的自定义视图,因为这是我希望滑动的目标位置。我遇到的问题是我不知道如何将操作设置为 UIViewController
中的方法。当我 drag/drop 在 Interface Builder 中向 View 做手势,然后将一个动作拖到控制器时,我可以做到这一点。
func swiped(_ sender: UISwipeGestureRecognizer) {
}
func addGestureToView(_ view: CardView) {
let gesture = UISwipeGestureRecognizer(target: view, action: Selector("swiped:"))
gesture.direction = .up
view.addGestureRecognizer(gesture)
}
我也试过
let gesture = UISwipeGestureRecognizer(target: view, action: #selector(swiped(_:)))
这两种方法都给我以下异常:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[testapp.CardView swiped:]: unrecognized selector sent to instance
我假设这是因为它正在 CardView
目标中寻找 swiped:
,而不是控制器中存在的方法。如何指定我希望它使用控制器来执行操作,同时将手势本身 仅 应用于 CardView
?
更改此行:
let gesture = UISwipeGestureRecognizer(target: view, action: Selector("swiped:"))
至:
let gesture = UISwipeGestureRecognizer(target: self, action: #selector(swiped(_:)))
说明
target: 在 UISwipeGestureRecognizer 中定义了你的操作方法将被调用的地方,通过定义 self 我们告诉我们滑动手势操作应该从 UIViewcontroller 调用而不是从 CardView
action: 在 UISwipeGestureRecognizer 中定义了应该在滑动手势上调用的方法。
我正在尝试在我的视图控制器中将方法注册为 UISwipeGestureRecognizer
的操作。目标视图是我使用 UIView
子类构建的自定义视图,因为这是我希望滑动的目标位置。我遇到的问题是我不知道如何将操作设置为 UIViewController
中的方法。当我 drag/drop 在 Interface Builder 中向 View 做手势,然后将一个动作拖到控制器时,我可以做到这一点。
func swiped(_ sender: UISwipeGestureRecognizer) {
}
func addGestureToView(_ view: CardView) {
let gesture = UISwipeGestureRecognizer(target: view, action: Selector("swiped:"))
gesture.direction = .up
view.addGestureRecognizer(gesture)
}
我也试过
let gesture = UISwipeGestureRecognizer(target: view, action: #selector(swiped(_:)))
这两种方法都给我以下异常:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[testapp.CardView swiped:]: unrecognized selector sent to instance
我假设这是因为它正在 CardView
目标中寻找 swiped:
,而不是控制器中存在的方法。如何指定我希望它使用控制器来执行操作,同时将手势本身 仅 应用于 CardView
?
更改此行:
let gesture = UISwipeGestureRecognizer(target: view, action: Selector("swiped:"))
至:
let gesture = UISwipeGestureRecognizer(target: self, action: #selector(swiped(_:)))
说明
target: 在 UISwipeGestureRecognizer 中定义了你的操作方法将被调用的地方,通过定义 self 我们告诉我们滑动手势操作应该从 UIViewcontroller 调用而不是从 CardView
action: 在 UISwipeGestureRecognizer 中定义了应该在滑动手势上调用的方法。