web-dev-qa-db-ja.com

ストーリーボード上のUIImageViewをクリック可能にする方法(Swift)

私はSwift(およびXcode開発全般)が初めてで、ストーリーボードでImageViewをクリック可能にする方法を知りたいと思っていました。別のView Controllerを示しています。

29
pjtnt11

そのために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

        }
    }
}
61
Dharmesh

あなたはそれを行うことができますさらに簡単に、ストーリーボードを介して画像をクリック可能にしますコーディングなしで

  • まず、StoryboardでUITapGestureRecognizerUIImageViewにドラッグする必要があります。
  • 次に、@IBAction func imageClicked(_ sender: Any) {}を使用して、コードで実行するIBActionを作成します
  • 次に、Document Outlineでジェスチャレコグナイザを選択し、Connection Inspector Tabに切り替えてSent Actions-> UITapGestureRecognizerIBActionにドラッグして、クラスでSelectorUIViewControllerに接続してから、前に作成した適切なアクションを選択する必要があります。
  • 最後に、画像ビューでチェックボックスUser Interaction Enabledを設定する必要があります。

完了、呼び出したい明白な関数を除いて、コードを1行も記述せずに完全にクリック可能なUIImageView。ただし、たとえば、代わりにセグエをプッシュする場合は、Triggered Seguesの代わりにジェスチャレコグナイザーSent Actionsを使用することで、コーディングをまったく行わなくてもかまいません。

Storyboardには制限がありますが、クリック可能な画像のコードを記述する必要はありません。 ;)

enter image description here

23
xxtesaxx

代わりに、テキストなしのUIButtonを作成し、それを希望する画像にすることをお勧めします。その後、Ctrlキーを押しながらイメージからセグメンテーションするビューコントローラーにドラッグします。または、View ControllerのコードにIBActionを作成して、手動でセグメンテーションすることもできます。

5
Zolnoor

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")
}
4
Rajesh.k

ストーリーボードで画像ビューのユーザーインタラクションを有効にし、このメソッドで取得します

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [touches anyObject];

    if ([touch view] == yourImageView)
    {
            //add your code for image touch here 
    }
}
2
LC 웃

ユーザーインタラクションを設定することでこれを達成しましたenable = true

touchesBeganの以下のこのコード...このためのクリーンでシンプルな

ImageViewもStackView内にありました

if let touch = touches.first {
   if touch.view == profilePicture {
      print("image touched")
   }
}
1
IOSDev

さて、上記のようにUITapGestureRecognizerを使用できますが、簡単なプロジェクトを行い、アプリの機能だけを気にする必要がある場合、最も簡単な方法は、テキストなしでUIImageViewを覆う透明なボタンを持ち、それを使用することです好きなコードを書くことができます。もちろん、非常に重要なプロジェクトなどを作成している場合はお勧めできませんが、簡単なアプリ(会議用の非常にシンプルなMVPなど)を作成したい場合は、この方法でうまくいくはずです。

0
Kyro