我的UITapGestureRecognizer有问题。我使用以下代码:
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.SelectPictureAction(_:)))
cardView.addGestureRecognizer(gesture)
和我的功能在这里:
@objc func SelectPictureAction(_ sender : UITapGestureRecognizer) {
print("card moment is Tapped")
}
问题是我点击我的卡却什么也没发生。我认为问题是我在不是同一类的init的UIView中安装了一个手势...
所以我的问题是:
当我在另一个类中调用的UIView中添加
gesture
时,可能会遇到麻烦吗?
这是我使用的3类的代码:
TableView代码:
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")
}
}
答案 0 :(得分:0)
您的选择器参数似乎是错误的,请像下面这样使用。
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.SelectMomentAction(_:)))
@objc func SelectMomentAction(_ sender : UITapGestureRecognizer) {
print("card moment is Tapped")
}
希望这行得通。
答案 1 :(得分:0)
您想要的可能类似于助手结构:
=index('District Data'!b:b, match(d2, 'District Data'!c:c, 0))
现在,您的SelectMoment结构实例可以与CardCell实例保持联系,并且CardCell可以看到它;拥有正确的属性,他们甚至可以毫无问题地来回交流。
请注意,该体系结构只是草图,向您展示了如何将两种类型的功能区分开。我不知道您打算使用的用例。也许您想要的是能够为每个不同的单元格类型分配不同配置的SelectMoment。在这种情况下,请不要在struct SelectMoment {
// ...
}
class CardCell : UITableViewCell {
var selectMoment : SelectMoment!
override func viewDidLoad() {
super.viewDidLoad()
self.selectMoment = SelectMoment(...)
// ...
}
// ...
}
中设置selectMoment
;允许其他一些类对其进行设置(可能通过初始化程序,也可能只是直接对其进行设置),并做出相应的响应。这种架构称为依赖注入。