我试着在用户点击的时候分配一个UIImageView给一个动作。
我知道如何为一个UIButton创建一个动作,但我怎么能模仿一个UIButton相同的行为,但使用一个UIImageView?
我试着在用户点击的时候分配一个UIImageView给一个动作。
我知道如何为一个UIButton创建一个动作,但我怎么能模仿一个UIButton相同的行为,但使用一个UIImageView?
当前回答
你可以设置UIButton的图像到你通常会放在UIImageView中的图像。例如,你会这样做:
myImageView.image = myUIImage
你可以用:
myButton.setImage(myUIImage, forState: UIControlState.Normal)
下面是你的代码:
override func viewDidLoad(){
super.viewDidLoad()
var myUIImage: UIImage //set the UIImage here
myButton.setImage(myUIImage, forState: UIControlState.Normal)
}
@IBOutlet var myButton: UIButton!
@IBAction func buttonTap(sender: UIButton!){
//handle the image tap
}
使用这个方法的好处是,如果你必须从数据库中加载图像,你可以在设置图像之前设置按钮的标题:
myButton.setTitle("Loading Image...", forState: UIControlState.Normal)
告诉您的用户您正在加载图像
其他回答
你可以设置UIButton的图像到你通常会放在UIImageView中的图像。例如,你会这样做:
myImageView.image = myUIImage
你可以用:
myButton.setImage(myUIImage, forState: UIControlState.Normal)
下面是你的代码:
override func viewDidLoad(){
super.viewDidLoad()
var myUIImage: UIImage //set the UIImage here
myButton.setImage(myUIImage, forState: UIControlState.Normal)
}
@IBOutlet var myButton: UIButton!
@IBAction func buttonTap(sender: UIButton!){
//handle the image tap
}
使用这个方法的好处是,如果你必须从数据库中加载图像,你可以在设置图像之前设置按钮的标题:
myButton.setTitle("Loading Image...", forState: UIControlState.Normal)
告诉您的用户您正在加载图像
你需要一个UITapGestureRecognizer。 要设置使用这个:
override func viewDidLoad()
{
super.viewDidLoad()
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
imageView.isUserInteractionEnabled = true
imageView.addGestureRecognizer(tapGestureRecognizer)
}
@objc func imageTapped(tapGestureRecognizer: UITapGestureRecognizer)
{
let tappedImage = tapGestureRecognizer.view as! UIImageView
// Your action
}
(你也可以使用一个UIButton并分配一个图像给它,没有文本,而不是简单地连接一个IBAction)
斯威夫特这样做:
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let tap = UITapGestureRecognizer(target: self, action: #selector(ViewController.tappedMe))
imageView.addGestureRecognizer(tap)
imageView.isUserInteractionEnabled = true
}
func tappedMe() {
print("Tapped on Image")
}
Swift4代码
尝试一些新的扩展方法:
import UIKit
extension UIView {
fileprivate struct AssociatedObjectKeys {
static var tapGestureRecognizer = "MediaViewerAssociatedObjectKey_mediaViewer"
}
fileprivate typealias Action = (() -> Void)?
fileprivate var tapGestureRecognizerAction: Action? {
set {
if let newValue = newValue {
// Computed properties get stored as associated objects
objc_setAssociatedObject(self, &AssociatedObjectKeys.tapGestureRecognizer, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
get {
let tapGestureRecognizerActionInstance = objc_getAssociatedObject(self, &AssociatedObjectKeys.tapGestureRecognizer) as? Action
return tapGestureRecognizerActionInstance
}
}
public func addTapGestureRecognizer(action: (() -> Void)?) {
self.isUserInteractionEnabled = true
self.tapGestureRecognizerAction = action
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture))
self.addGestureRecognizer(tapGestureRecognizer)
}
@objc fileprivate func handleTapGesture(sender: UITapGestureRecognizer) {
if let action = self.tapGestureRecognizerAction {
action?()
} else {
print("no action")
}
}
}
现在,无论何时我们想要添加一个UITapGestureRecognizer到一个UIView或UIView的子类,如UIImageView,我们可以这样做,而不需要为选择器创建相关的函数!
用法:
profile_ImageView.addTapGestureRecognizer {
print("image tapped")
}
这是我发现的,更容易设置。
这是YouTube上的视频
打开库,寻找“Tap Gesture Recognizer”对象。 将对象拖到故事板中,并将委托设置为您想要触发动作的图像。 然后转到视图控制器,拖动相同的对象设置IBAction。