Swift

2015-01-10 20 views
118

'da UIImageView nesnesi için eylem atama Kullanıcı tıkladığında bir eyleme UIImageView atamaya çalışıyorum.Swift

UIButton için nasıl bir eylem oluşturulduğunu biliyorum, ancak UIButton'un aynı davranışını nasıl taklit edebilirim, ama bir UIImageView kullanıyor?

cevap

250

.

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:))) 
    imageView.isUserInteractionEnabled = true 
    imageView.addGestureRecognizer(tapGestureRecognizer) 
} 

func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) 
{ 
    let tappedImage = tapGestureRecognizer.view as! UIImageView 

    // Your action 
} 

Aslında sadece imajını ayarlayabilirsiniz

+0

sayesinde bir görüntü olarak düğmeye kullanılan ve mükemmel çalıştı :) – user3706773

+3

nitpick: var tgr = UITapGestureRecognizer (hedef: self action: Selector ("imageTapped:")), iki parametre arasında virgül gerekir. – sysuser

+2

, MidHun MP tarafından aşağıda belirtildiği gibi, userInteractionEnabled = true – Sheraz

48

Bir hareket algılayıcısı eklemeniz gerekiyor (UITapGestureRecognizer öğelerine dokunun, UILongPressGestureRecognizer tuşunu basılı tutup kullanın) UIImageView ürününüze.

let tap = UITapGestureRecognizer(target: self, action: #selector(YourClass.tappedMe)) 
imageView.addGestureRecognizer(tap) 
imageView.isUserInteractionEnabled = true 

Ve benzeri seçici yöntemini uygulamak: Bir UITapGestureRecognizer gerekir

func tappedMe() 
{ 
    println("Tapped on Image") 
} 
+10

userInteractionEnabled anahtarıdır yapmak. – kennydust

+0

bu benim için çalışmıyor "yardım" – hatim

+0

@hatim: Karşılaştığınız sorun nedir? Yeni bir sorununuz varsa, lütfen yeni bir soru olarak gönderin. –

7

(Ayrıca UIButton kullanmak ve ona bir görüntü atamak, metin olmadan ve sadece çok bir IBAction bağlanabilir): Bu kullanımını ayarlamak için UIButton, normalde bir UIImageView ürününe koyarsınız. Örneğin, yapardın burada:

myImageView.image = myUIImage 

Bunun yerine kullanabilirsiniz: Bu kullanma hakkında

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 
} 

büyük bir şey:

myButton.setImage(myUIImage, forState: UIControlState.Normal) 

Yani, burada kod gibi görünebilir ne yöntem, görüntüyü bir veritabanından yüklemek zorunda kalırsanız, görüntüyü ayarlamadan önce düğmenin başlığını ayarlayabilirsiniz:

myButton.setTitle("Loading Image...", forState: UIControlState.Normal) 
, sadece Storyboard/xib, gestureRecognizer için imageview Ctrl-sürükle ve Ctrl-sürükle içine sürükleyip tek Sen imageview bir UITapGestureRecognizer ekleyebilir görüntüyü

21

yüklüyorsunuz kullanıcıların söylemek gerekirse IBAction yapmak için, jestRecognizer'dan Swift dosyasına. enter image description here

+3

'UIImageView', varsayılan olarak dokunmalara yanıt vermiyor. Ayrıca, kullanıcı etkileşimlerini etkinleştirmeniz gerekiyor. – rmaddy

+0

@rmaddy Oops, bu doğru. Düzenlenen. – Emil

+1

Kullanıcı Etkileşim Etkin, benim için hile yaptı, teşekkürler! – saman0suke

1

Sen bir musluk için UIImageView üstünden şeffaf arka plan ile bir UIButton koyun ve dinleyebilirsiniz: Bu resimde görüldüğü gibi

Ayrıca, UIImageView kullanıcı etkileşimlerini etkinleştirmeniz gerekir yukarıdaki hızlı 2.0 için görüntüyü

+1

Bir seçeneği açıklamanın hızlı bir yolu. Herkesin bildiğini sanıyordum! –

+0

Gereksiz UI bileşenlerini gerçek bir neden olmadan eklemek iyi bir fikir değildir. Kullanıcı arayüzünün karmaşıklığını artıracak ve aynı otomatik yerleşim kısıtlamalarını da ele almanız gerekiyor. Bir TapGestureRecognizer eklemek daha iyidir. – Gunhan

12

yükleme ve önce düğmesi bu

@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.userInteractionEnabled = true 
    } 
    func tappedMe() 
    { 
     print("Tapped on Image") 
    } 
+0

Bu, hızlı 3.0 ile iyi çalışır. Teşekkürler!! –

+0

userInteractionEnabled artık isUserInteractionEnabled olarak yeniden adlandırıldı –