gpt4 book ai didi

ios - UIButton Action 不在 Swift 中调用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:52 26 4
gpt4 key购买 nike

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

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)
}
}

最佳答案

我得到了答案,在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com