如何在Swift/Xcode中设置imageview数组的tap



我试图从我的imageview数组中为每个imageview设置tap侦听器,并在选择时打印。理想情况下,我希望每个imageview都有自己的监听器——比如"imageview 2被选中了"。谢谢!

class ViewController2: UIViewController {
@IBOutlet weak var scrollView: UIScrollView!
var index: Int = 0
var images: [UIImage] = [UIImage(named: "image1.png")!, UIImage(named: "image2.png")!, UIImage(named: "image3.png")!, UIImage(named: "image4.png")!, UIImage(named: "image5.png")!, UIImage(named: "image6.png")!, UIImage(named: "image7.png")!, UIImage(named: "image8.png")!, UIImage(named: "image9.png")!, UIImage(named: "image10.png")!, UIImage(named: "image11.png")!, UIImage(named: "image12.png")!, UIImage(named: "image13.png")!, UIImage(named: "image14.png")!, UIImage(named: "image15.png")!, UIImage(named: "image16.png")!, UIImage(named: "image17.png")!, UIImage(named: "image18.png")!, UIImage(named: "image19.png")!, UIImage(named: "image20.png")!, UIImage(named: "image21.png")!, UIImage(named: "image22.png")!, UIImage(named: "image23.png")!, UIImage(named: "image24.png")!, UIImage(named: "image25.png")!, UIImage(named: "image26.png")!, UIImage(named: "image27.png")!, UIImage(named: "image28.png")!, UIImage(named: "image29.png")!, UIImage(named: "image30.png")!]
var imageView: [UIImageView] = []

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let screenSize: CGRect = UIScreen.mainScreen().bounds
    let screenWidth = screenSize.width
    //let screenHeight = screenSize.height
    let numWidth: CGFloat = 3
    let numHeight: CGFloat = 10
    self.scrollView.frame.size.width = screenWidth
    let width: CGFloat = (self.scrollView.frame.size.width - (numWidth + 1))/3
    var tap = UITapGestureRecognizer(target: self, action: Selector("tappedMe"))
    for var i:CGFloat = 0; i < 3; ++i{
        for var j:CGFloat = 0; j < 10; ++j {
            let image: UIImage = images[index]
            imageView.append(UIImageView(image: image))
            imageView[index].frame = CGRectMake(width*i, width*j, width, width)
            self.scrollView.addSubview(imageView[index])
            imageView[index].addGestureRecognizer(tap)
            imageView[index].userInteractionEnabled = true
            index++
        }
    }
    scrollView.contentSize.height = (width)*numHeight

}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
func imageTapped(img: AnyObject)
{
    // Your action
    print("tapped")
}

}

你应该使用自定义类来代替UIImageView的数组

 import UIKit 
 class MyCustomImageView : UIImageView{
    var myId : String = "";
    override init(frame: CGRect){
        super.init(frame: frame);
    }
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        println("IM TOUCHED(myId)");
    }
}

。..

var imageView: [MyCustomImageView] = []

和在循环中:

  for var i:CGFloat = 0; i < 3; ++i{
        for var j:CGFloat = 0; j < 10; ++j {
            let image: UIImage = images[index]
            imageView.append(MyCustomImageView(frame:  CGRectMake(width*i, width*j, width, width)))
            imageView[index].image = image;
            self.scrollView.addSubview(imageView[index])
            imageView[index].myId = "Image number (index)";

            index++
        }
    }

和顺便说一句,不知道你想用所有的宽度和高度做什么,但这是一个更清晰的方式:

class ViewController2: UIViewController {
    @IBOutlet weak var scrollView: UIScrollView!
    let imageIndex : (begin:Int,end:Int) = (begin:1,end:30);
    var imageView: [MyCustomImageView] = []
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let screenSize: CGRect = UIScreen.mainScreen().bounds
        let screenWidth = screenSize.width
        //let screenHeight = screenSize.height
        let numWidth: CGFloat = 3
        let numHeight: CGFloat = 10
        self.scrollView.frame.size.width = screenWidth
        let width: CGFloat = (self.scrollView.frame.size.width - (numWidth + 1))/3
        var index = self.imageIndex.begin;
        for var i:CGFloat = 0; i < 3; ++i{
            for var j:CGFloat = 0; j < 10; ++j {
                let image: UIImage? = UIImage(named: "image(index++).png");
                var currentImageView = MyCustomImageView(frame: CGRectMake(width*i, width*j, width, width))
                currentImageView.image = image;
                currentImageView.userInteractionEnabled = true
                currentImageView.myId = "image(index++).png";
                self.scrollView.addSubview(imageView[index])
                imageView.append(currentImageView);
            }
        }
        scrollView.contentSize.height = (width)*numHeight

    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

最新更新