私はSwift(およびXcode開発全般)が初めてで、ストーリーボードでImageViewをクリック可能にする方法を知りたいと思っていました。別のView Controllerを示しています。
そのためにtapGestureを追加できます。コードは次のとおりです。
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// create tap gesture recognizer
let tapGesture = UITapGestureRecognizer(target: self, action: "imageTapped:")
// add it to the image view;
imageView.addGestureRecognizer(tapGesture)
// make sure imageView can be interacted with by user
imageView.userInteractionEnabled = true
}
func imageTapped(gesture: UIGestureRecognizer) {
// if the tapped view is a UIImageView then set it to imageview
if let imageView = gesture.view as? UIImageView {
println("Image Tapped")
//Here you can initiate your new ViewController
}
}
}
Swift 3.
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// create tap gesture recognizer
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.imageTapped(gesture:)))
// add it to the image view;
imageView.addGestureRecognizer(tapGesture)
// make sure imageView can be interacted with by user
imageView.isUserInteractionEnabled = true
}
func imageTapped(gesture: UIGestureRecognizer) {
// if the tapped view is a UIImageView then set it to imageview
if (gesture.view as? UIImageView) != nil {
print("Image Tapped")
//Here you can initiate your new ViewController
}
}
}
Swift 5.
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// create tap gesture recognizer
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.imageTapped(gesture:)))
// add it to the image view;
imageView.addGestureRecognizer(tapGesture)
// make sure imageView can be interacted with by user
imageView.isUserInteractionEnabled = true
}
@objc func imageTapped(gesture: UIGestureRecognizer) {
// if the tapped view is a UIImageView then set it to imageview
if (gesture.view as? UIImageView) != nil {
print("Image Tapped")
//Here you can initiate your new ViewController
}
}
}
あなたはそれを行うことができますさらに簡単に、ストーリーボードを介して画像をクリック可能にしますコーディングなしで。
UITapGestureRecognizer
をUIImageView
にドラッグする必要があります。@IBAction func imageClicked(_ sender: Any) {}
を使用して、コードで実行するIBActionを作成しますDocument Outline
でジェスチャレコグナイザを選択し、Connection Inspector Tab
に切り替えてSent Actions
-> UITapGestureRecognizer
をIBAction
にドラッグして、クラスでSelector
をUIViewController
に接続してから、前に作成した適切なアクションを選択する必要があります。User Interaction Enabled
を設定する必要があります。完了、呼び出したい明白な関数を除いて、コードを1行も記述せずに完全にクリック可能なUIImageView。ただし、たとえば、代わりにセグエをプッシュする場合は、Triggered Segues
の代わりにジェスチャレコグナイザーSent Actions
を使用することで、コーディングをまったく行わなくてもかまいません。
Storyboardには制限がありますが、クリック可能な画像のコードを記述する必要はありません。 ;)
代わりに、テキストなしのUIButtonを作成し、それを希望する画像にすることをお勧めします。その後、Ctrlキーを押しながらイメージからセグメンテーションするビューコントローラーにドラッグします。または、View ControllerのコードにIBActionを作成して、手動でセグメンテーションすることもできます。
for Swift version 3.0以下のコードを試してください
override func viewDidLoad() {
super.viewDidLoad()
let tap1 = UITapGestureRecognizer(target: self, action: #selector(tapGesture1))
imageview.addGestureRecognizer(tap1)
imageview.isUserInteractionEnabled = true
}
func tapGesture1() {
print("Image Tapped")
}
ストーリーボードで画像ビューのユーザーインタラクションを有効にし、このメソッドで取得します
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
if ([touch view] == yourImageView)
{
//add your code for image touch here
}
}
ユーザーインタラクションを設定することでこれを達成しましたenable = true
touchesBeganの以下のこのコード...このためのクリーンでシンプルな
ImageViewもStackView内にありました
if let touch = touches.first {
if touch.view == profilePicture {
print("image touched")
}
}
さて、上記のようにUITapGestureRecognizerを使用できますが、簡単なプロジェクトを行い、アプリの機能だけを気にする必要がある場合、最も簡単な方法は、テキストなしでUIImageViewを覆う透明なボタンを持ち、それを使用することです好きなコードを書くことができます。もちろん、非常に重要なプロジェクトなどを作成している場合はお勧めできませんが、簡単なアプリ(会議用の非常にシンプルなMVPなど)を作成したい場合は、この方法でうまくいくはずです。