UIButton Action不会调用Swift?

时间:2016-05-03 05:17:34

标签: ios uibutton swift2

在我的项目中我创建了左视图和右视图,它动态显示两个不同的视图,左视图侧创建firstView,FirstView里面显示标题,注释,图像和视频。此外,RightView侧创建显示标题,评论,图像和视频内的第二个视图。图像和视频仅显示部分视图。设计完全以编程方式创建,我的设计如下,

enter image description here

我的问题是播放按钮(UIButton)动作未调用原因?

我不知道, 我的代码在下面给出,UIButton名称:btnPlay,动作名称:buttonAction:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var scrollViewBase: UIScrollView!
    var leftView = UIView()
    var rightView = UIView()

    var wholeYLeft = CGFloat()
    var wholeYRight = CGFloat()
    let btnPlay = UIButton()

    var myArrayOfDict: NSArray = [
        ["Title": "MacBook", "Text": "Our goal with MacBook was to do the impossible: engineer a full-sized experience into the lightest and most compact Mac notebook ever. That meant reimagining every element to make it not only lighter and thinner but also better.", "Image":"MacBook1","video":""],
        ["Title": "OS X", "Text": "OS X is the operating system that makes it possible to do all the things you do on a Mac.", "Image":"","video":""],
        ["Title": "MacBook Pro", "Text": "Now with the force Touch trackpad,longer battery life and faster flash storage", "Image":"MacBookPro1","video":""],
        ["Title": "Mac Mini", "Text": "Mac mini is an affordable powerhouse that packs the entire Mac experience into a 19.7cm-square frame. Just connect your own display, keyboard and mouse, and you’re ready to make big things happen.", "Image":"Mini","video":""],
        ["Title": "iMac", "Text": "The idea behind iMac has never wavered: to craft the ultimate desktop experience. The best display, paired with high-performance processors, graphics and storage ", "Image":"","video":""],
        ["Title": "MacBook Air", "Text": "The 11-inch MacBook Air lasts up to 9 hours between charges and the 13-inch model lasts up to an incredible 12 hours. So from your morning coffee till your evening commute, you can work unplugged.", "Image":"VideoThumn","video":"Official Apple MacBook Air Video YouTube.mp4"]
    ]


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.title = "Dynamic Cell"


        leftView.frame = CGRectMake(0, 0, self.view.frame.width/2, self.view.frame.height)
        rightView.frame = CGRectMake(self.view.frame.width/2, 0, self.view.frame.width/2, self.view.frame.height)

//        leftView.backgroundColor = UIColor.lightGrayColor()
//        rightView.backgroundColor = UIColor.grayColor()

        self.scrollViewBase.addSubview(leftView)
        self.scrollViewBase.addSubview(rightView)

        self.callViewMethod()
    }

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

    func callViewMethod() {

        var yFloatLeft : CGFloat! = 5

        var yFloatRight : CGFloat! = 5

        wholeYLeft = 0
        wholeYRight = 0

        for var i = 0; i < myArrayOfDict.count; i++ {

            let isCheckImage = myArrayOfDict[i].valueForKey("Image") as! String
            let isCheckVideo = myArrayOfDict[i].valueForKey("video") as! String

            let str = myArrayOfDict[i].valueForKey("Text") as? String

            let boundingRectHeight = str!.boundingRectWithSize(CGSizeMake(self.leftView.frame.width-10, CGFloat.max),
                options:NSStringDrawingOptions.UsesLineFragmentOrigin,
                attributes: [NSFontAttributeName: UIFont(name: "Arial", size: 14.0)!], context:nil).size.height + 60.0


            if(i%2 == 0) {
                let firstView = UIView()
                print(yFloatLeft)
                if(isCheckImage == "") {
                    firstView.frame = CGRectMake(5, yFloatLeft, self.leftView.frame.width-10, 30 + boundingRectHeight)
                } else {
                    firstView.frame = CGRectMake(5, yFloatLeft, self.leftView.frame.width-10, 180 + boundingRectHeight)
                }

//                firstView.backgroundColor = UIColor.redColor()
                firstView.layer.borderWidth = 2.0
                firstView.layer.borderColor = UIColor.lightGrayColor().CGColor
                leftView.addSubview(firstView)

                let lblTitle = UILabel()
                lblTitle.frame = CGRectMake(0, 0, self.leftView.frame.width-10, 30)
                lblTitle.textAlignment = NSTextAlignment.Center
                lblTitle.text = myArrayOfDict[i].valueForKey("Title") as? String

                let lblText = lblInset()
                lblText.frame = CGRectMake(0, 30, self.leftView.frame.width-10, boundingRectHeight)
                lblText.text = myArrayOfDict[i].valueForKey("Text") as? String
                lblText.numberOfLines = 0
                lblText.lineBreakMode = .ByWordWrapping
                lblText.font = UIFont(name: "Arial", size: 16)
                lblText.textAlignment = NSTextAlignment.Justified

                let mainImageView = UIImageView()

                if(isCheckImage == "") {
                    mainImageView.hidden = true
                    yFloatLeft = yFloatLeft + 30 + boundingRectHeight + 10

                } else {
                    mainImageView.hidden = false
                    mainImageView.frame = CGRectMake(0, 30 + boundingRectHeight, self.leftView.frame.width-10, 150)
                    mainImageView.image = UIImage(named: (myArrayOfDict[i].valueForKey("Image") as? String)!)

                    if(isCheckVideo == "") {
                        btnPlay.hidden = true
                    } else {
                        btnPlay.hidden = false
                        btnPlay.frame = CGRectMake((mainImageView.frame.width/2)-10, (mainImageView.frame.height/2)-10, 30, 30)
                        btnPlay.backgroundColor = UIColor.blackColor()
                        btnPlay.userInteractionEnabled = true
                        btnPlay.addTarget(self, action: "buttonAction:", forControlEvents: .TouchUpInside)
                        btnPlay.setImage(UIImage(named: "Play"), forState: .Normal)
                        mainImageView.addSubview(btnPlay)

                    }
                    yFloatLeft = yFloatLeft + 30 + boundingRectHeight + 160
                }


                firstView.addSubview(lblTitle)
                firstView.addSubview(lblText)
                firstView.addSubview(mainImageView)
                firstView.bringSubviewToFront(btnPlay)

            } else {
                let secondView = UIView()
                if(isCheckImage == "") {
                    secondView.frame = CGRectMake(5, yFloatRight, self.rightView.frame.width-10, 30 + boundingRectHeight)
                } else {
                    secondView.frame = CGRectMake(5, yFloatRight, self.rightView.frame.width-10, 180 + boundingRectHeight)
                }

//                secondView.backgroundColor = UIColor.purpleColor()
                secondView.layer.borderWidth = 2.0
                secondView.layer.borderColor = UIColor.lightGrayColor().CGColor
                rightView.addSubview(secondView)

                let lblTitle = UILabel()
                lblTitle.frame = CGRectMake(0, 0, self.leftView.frame.width-10, 30)
                lblTitle.textAlignment = NSTextAlignment.Center
                lblTitle.text = myArrayOfDict[i].valueForKey("Title") as? String

                let lblText = lblInset()
                lblText.frame = CGRectMake(0, 30, self.leftView.frame.width-10, boundingRectHeight)
                lblText.text = myArrayOfDict[i].valueForKey("Text") as? String
                lblText.numberOfLines = 0
                lblText.lineBreakMode = .ByWordWrapping
                lblText.font = UIFont(name: "Arial", size: 16)
                lblText.textAlignment = NSTextAlignment.Justified

                let mainImageView = UIImageView()

                if(isCheckImage == "") {
                    mainImageView.hidden = true
                    yFloatRight = yFloatRight + 30 + boundingRectHeight + 10

                } else {
                    mainImageView.hidden = false
                    mainImageView.frame = CGRectMake(0, 30 + boundingRectHeight, self.leftView.frame.width-10, 150)
                    mainImageView.image = UIImage(named: (myArrayOfDict[i].valueForKey("Image") as? String)!)

                    if(isCheckVideo == "") {
                        btnPlay.hidden = true
                    } else {
                        btnPlay.hidden = false
                        btnPlay.frame = CGRectMake((mainImageView.frame.width/2)-10, (mainImageView.frame.height/2)-10, 30, 30)
                        btnPlay.userInteractionEnabled = true
                        btnPlay.backgroundColor = UIColor.blackColor()
                        btnPlay.setImage(UIImage(named: "Play"), forState: .Normal)
                        btnPlay.addTarget(self, action: Selector("buttonAction:"), forControlEvents: .TouchUpInside)
                        mainImageView.addSubview(btnPlay)
                    }


                    yFloatRight = yFloatRight + 30 + boundingRectHeight + 160
                }


                secondView.addSubview(lblTitle)
                secondView.addSubview(lblText)
                secondView.addSubview(mainImageView)
                secondView.bringSubviewToFront(btnPlay)

            }

            wholeYLeft = yFloatLeft
            wholeYRight = yFloatRight
        }
        print(wholeYLeft)
        print(wholeYRight)
        leftView.frame = CGRectMake(0, 0, self.view.frame.width/2, wholeYLeft)
        rightView.frame = CGRectMake(self.view.frame.width/2, 0, self.view.frame.width/2, wholeYRight)

        if(wholeYRight > wholeYLeft) {
            self.scrollViewBase.contentSize = CGSize(width:self.view.frame.width, height: wholeYRight)
        } else {
            self.scrollViewBase.contentSize = CGSize(width:self.view.frame.width, height: wholeYLeft)
        }

    }

    func buttonAction(sender:UIButton!) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let controller = storyboard.instantiateViewControllerWithIdentifier("PlayViewController") as! PlayViewController

        controller.lblTitle.text = myArrayOfDict[5].valueForKey("Title") as? String
        controller.lblComments.text = myArrayOfDict[5].valueForKey("Text") as? String

        self.presentViewController(controller, animated: true, completion: nil)
    }
}

3 个答案:

答案 0 :(得分:1)

我得到了答案,在UIButton(btnPlay)添加子视图给UIImageView,我的问题是mainImageView.addSubview(btnPlay),因此将子视图更改为UIView而不是{{1}正确的代码是

UIImageView

为我工作

答案 1 :(得分:0)

您必须为动态创建的Imageview启用用户交互,因此请在之后再写一行

let mainImageView = UIImageView()
mainImageView.userInteractionEnabled = true

希望这会奏效。

答案 2 :(得分:0)

您必须标记按钮,然后才能识别哪个按钮

btnPlay.tag = 1