UITapGestureRecognizer 操作不起作用
UITapGestureRecognizer action don't work
我的 UITapGestureRecognizer 有问题。我使用此代码:
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.SelectPictureAction(_:)))
cardView.addGestureRecognizer(gesture)
我的功能在这里:
@objc func SelectPictureAction(_ sender : UITapGestureRecognizer) {
print("card moment is Tapped")
}
问题是我刷了我的卡,但没有任何反应。我认为问题是我在 UIView 中安装了一个手势,它不是在同一个 class...
中初始化的
所以我的问题是:
This is possible there are a trouble when I add a gesture
in a UIView called in another class ?
这是我的 3 class 我使用的代码:
表格视图代码:
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(CardCell.self, forCellReuseIdentifier: "Cell")
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier:"Cell") as! CardCell
cell.widthOfDevice = tableView.bounds.size.width
if indexPath.row == 1 {
cell.doTheWork(statutOfCard: .selectMoment)
}else{
cell.doTheWork(statutOfCard: .goMoment(picture:#imageLiteral(resourceName: "img2")))
}
return cell
}
}
CardCell 代码:
class CardCell : UITableViewCell {
let cardView = UIView()
enum statut {
case selectMoment
case goMoment(picture: UIImage)
}
func doTheWork(statutOfCard : statut){
switch statutOfCard {
case .selectMoment:
self.drawMomentPicture()
case .goMoment(let picture):
self.drawGoMoment(image: picture)
default:
cardViewHeightCon.constant = 300
self.addCardShadow()
}
}
func drawMomentPicture(){
if(cardIsDraw == false){
widthOfCard = widthOfDevice - (widthMarginConstraint*2)
cardViewHeightCon.constant = widthOfCard!*ratioOfImage
_ = SelectMoment(countUserMoment: 1, cardView: self.cardView, tableViewCell: self) // Here I call my class
self.addCardShadow()
cardIsDraw = true
}
}
}
SelectMoment 代码:
class SelectMoment {
let countUserMoment: Int
let cardView : UIView
let selfTableViewCell : UITableViewCell
init(countUserMoment: Int, cardView : UIView, tableViewCell : UITableViewCell) {
self.countUserMoment = countUserMoment
self.cardView = cardView
self.selfTableViewCell = tableViewCell
self.drawCard()
}
func drawCard(){
cardView.backgroundColor = .yellow
cardView.isUserInteractionEnabled = true
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.SelectMomentAction(_:)))
cardView.addGestureRecognizer(gesture)
}
@objc func SelectMomentAction(_ sender : UITapGestureRecognizer) {
print("card moment is Tapped")
}
}
你的选择器参数似乎是错误的,请像下面那样使用。
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.SelectMomentAction(_:)))
@objc func SelectMomentAction(_ sender : UITapGestureRecognizer) {
print("card moment is Tapped")
}
希望这有效。
你想要的可能是辅助结构:
struct SelectMoment {
// ...
}
class CardCell : UITableViewCell {
var selectMoment : SelectMoment!
override func viewDidLoad() {
super.viewDidLoad()
self.selectMoment = SelectMoment(...)
// ...
}
// ...
}
现在您的 SelectMoment 结构实例有一个与您的 CardCell 实例连接的地方,并且 CardCell 可以看到它;有了正确的属性,他们甚至可以毫无问题地来回交谈。
请注意,该体系结构只是向您展示如何区分这两种类型的权力的草图。我不知道您的预期用例。也许您想要的是能够为每种不同的细胞类型分配不同配置的 SelectMoment。在那种情况下,不要在viewDidLoad
中设置selectMoment
;允许其他 class 设置它(可能通过初始化程序或可能只是直接设置),并相应地做出响应。该架构称为 依赖注入。
我的 UITapGestureRecognizer 有问题。我使用此代码:
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.SelectPictureAction(_:)))
cardView.addGestureRecognizer(gesture)
我的功能在这里:
@objc func SelectPictureAction(_ sender : UITapGestureRecognizer) {
print("card moment is Tapped")
}
问题是我刷了我的卡,但没有任何反应。我认为问题是我在 UIView 中安装了一个手势,它不是在同一个 class...
中初始化的所以我的问题是:
This is possible there are a trouble when I add a
gesture
in a UIView called in another class ?
这是我的 3 class 我使用的代码:
表格视图代码:
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(CardCell.self, forCellReuseIdentifier: "Cell")
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier:"Cell") as! CardCell
cell.widthOfDevice = tableView.bounds.size.width
if indexPath.row == 1 {
cell.doTheWork(statutOfCard: .selectMoment)
}else{
cell.doTheWork(statutOfCard: .goMoment(picture:#imageLiteral(resourceName: "img2")))
}
return cell
}
}
CardCell 代码:
class CardCell : UITableViewCell {
let cardView = UIView()
enum statut {
case selectMoment
case goMoment(picture: UIImage)
}
func doTheWork(statutOfCard : statut){
switch statutOfCard {
case .selectMoment:
self.drawMomentPicture()
case .goMoment(let picture):
self.drawGoMoment(image: picture)
default:
cardViewHeightCon.constant = 300
self.addCardShadow()
}
}
func drawMomentPicture(){
if(cardIsDraw == false){
widthOfCard = widthOfDevice - (widthMarginConstraint*2)
cardViewHeightCon.constant = widthOfCard!*ratioOfImage
_ = SelectMoment(countUserMoment: 1, cardView: self.cardView, tableViewCell: self) // Here I call my class
self.addCardShadow()
cardIsDraw = true
}
}
}
SelectMoment 代码:
class SelectMoment {
let countUserMoment: Int
let cardView : UIView
let selfTableViewCell : UITableViewCell
init(countUserMoment: Int, cardView : UIView, tableViewCell : UITableViewCell) {
self.countUserMoment = countUserMoment
self.cardView = cardView
self.selfTableViewCell = tableViewCell
self.drawCard()
}
func drawCard(){
cardView.backgroundColor = .yellow
cardView.isUserInteractionEnabled = true
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.SelectMomentAction(_:)))
cardView.addGestureRecognizer(gesture)
}
@objc func SelectMomentAction(_ sender : UITapGestureRecognizer) {
print("card moment is Tapped")
}
}
你的选择器参数似乎是错误的,请像下面那样使用。
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.SelectMomentAction(_:)))
@objc func SelectMomentAction(_ sender : UITapGestureRecognizer) {
print("card moment is Tapped")
}
希望这有效。
你想要的可能是辅助结构:
struct SelectMoment {
// ...
}
class CardCell : UITableViewCell {
var selectMoment : SelectMoment!
override func viewDidLoad() {
super.viewDidLoad()
self.selectMoment = SelectMoment(...)
// ...
}
// ...
}
现在您的 SelectMoment 结构实例有一个与您的 CardCell 实例连接的地方,并且 CardCell 可以看到它;有了正确的属性,他们甚至可以毫无问题地来回交谈。
请注意,该体系结构只是向您展示如何区分这两种类型的权力的草图。我不知道您的预期用例。也许您想要的是能够为每种不同的细胞类型分配不同配置的 SelectMoment。在那种情况下,不要在viewDidLoad
中设置selectMoment
;允许其他 class 设置它(可能通过初始化程序或可能只是直接设置),并相应地做出响应。该架构称为 依赖注入。