OGeek|极客世界-中国程序员成长平台

标题: ios - UIButton Action 不会在 Swift 中调用? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 16:11
标题: ios - UIButton Action 不会在 Swift 中调用?

在我的项目中,我创建了左 View 和右 View ,它动态显示两个不同的 View ,左 View 侧创建 firstView,FirstView 内部显示标题、评论、图像和视频。并且 RightView 侧在显示标题、评论、图像和视频中创建 secondView。图片和视频仅显示部分 View 。该设计完全以编程方式创建,我的设计如下所示,

enter image description here

我的问题是播放按钮(UIButton) Action not Called 为什么?

我不知道, 我的代码如下,UIButton 名称:btnPlay, Action 名称: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: "lay"), 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: "lay"), 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("layViewController") 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)
    }
}



Best Answer-推荐答案


我得到了一个答案,在 UIButton (btnPlay) 添加 subview 给 UIImageView,我的问题是 mainImageView.addSubview(btnPlay),所以将 subView 更改为 UIView 而不是 UIImageView 正确的代码是

secondView.addSubview(btnPlay)
secondView.bringSubviewToFront(btnPlay)

它对我有用

关于ios - UIButton Action 不会在 Swift 中调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36996117/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (https://ogeek.cn/) Powered by Discuz! X3.4