- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您可能会问自己“有条件地可点击”是什么意思:
我有一个 UITableView,里面有一些生成的单元格。细胞上有一些图像和标签。无论我在哪里点击单元格区域(在单元格本身、图像或标签上),它都会带我到 CellDetailViewController - ref. image .
现在,在导航栏中我想要一个“过滤器”按钮,当点击(或者更确切地说触发 - 点击打开,点击关闭)时,使这些单元格上的 UI 元素点击时执行特定于元素的操作,而不是像通常那样转到 ViewController。我计划采取一个操作,根据元素显示的内容来获取元素并过滤表格以仅显示包含特定数据的单元格 - 这意味着我需要确切地知道在哪个单元格中点击了哪个元素(最好的情况它是否在参数中作为发送者传递,以便我可以访问它的属性)。
我最初想到的是我可以让 UI 元素始终调用操作,这将检查过滤器按钮是否被点击,然后继续到 ViewController(如果没有),或者执行过滤器操作(如果它是)。这种方法的问题是它看起来真的很笨重而且很慢,如果有更好的解决方案,我真的不想重新发明轮子。
那么,问题是 - 是否有另一种方法可以做到这一点?使 UI 元素可按需点击?
E:添加了有关该问题的更多信息。
最佳答案
我建议你使用 UIGestureRecognizer
来实现你想要的,因为 UIImageView
和 UILabel
默认不响应用户的触摸事件.
这里有一些你可能想看的代码(这是一个工作示例)
protocol TableViewCellDelegate: class {
func labelTouchedInCell(cell: TableViewCell)
func imagedTouchedInCell(cell: TableViewCell)
}
class TableViewCell: UITableViewCell {
// You can drag & drop a label and an imageView to the prototype cell and create these IBOutlets
@IBOutlet weak var label: UILabel! {
didSet {
label.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "_labelTouched"))
label.userInteractionEnabled = true
}
}
@IBOutlet weak var cardImage: UIImageView! {
didSet {
cardImage.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "_imageTouched"))
cardImage.userInteractionEnabled = true
}
}
var delegate: TableViewCellDelegate?
func _labelTouched() {
delegate?.labelTouchedInCell(self)
}
func _imageTouched() {
delegate?.imagedTouchedInCell(self)
}
}
class TableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = 80
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell
cell.delegate = self
return cell
}
}
extension TableViewController: TableViewCellDelegate {
func labelTouchedInCell(cell: TableViewCell) {
let indexPath = tableView.indexPathForCell(cell)!
print("Touched label in cell at row \(indexPath.row)")
}
func imagedTouchedInCell(cell: TableViewCell) {
let indexPath = tableView.indexPathForCell(cell)!
print("Touched image in cell at row \(indexPath.row)")
}
}
如果你只想在满足某些条件时处理点击,那么在委托(delegate)方法中检查它
关于ios - 在 Swift 中制作一个 UI 元素 "conditionally tappable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32655895/
我在 viewDidLoad 中有以下内容。它设置了自定义 rightBarButtonItem(在自定义 UINavigationBar 中)。 let button = UIButton(
我想每两秒调用一个函数。我尝试使用 setInterval(myFunction, 2000);它有效,但是: 页面中还有一些可点击的元素。 $('div.square').tappable(func
您可能会问自己“有条件地可点击”是什么意思: 我有一个 UITableView,里面有一些生成的单元格。细胞上有一些图像和标签。无论我在哪里点击单元格区域(在单元格本身、图像或标签上),它都会带我到
我有一个 Assets 代表一个按钮,下面有一个阴影。我只想让蓝色部分可点击。有没有简单的方法来做到这一点? 谢谢。 最佳答案 您可以像这样以编程方式添加阴影: button.layer.shadow
我是一名优秀的程序员,十分优秀!