• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - UIButton Action 不会在 Swift 中调用?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 16:11:29 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在我的项目中,我创建了左 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap