gpt4 book ai didi

ios - 在 FOR 循环中创建和设置 UIButton 的标题会中断循环

转载 作者:行者123 更新时间:2023-11-30 14:03:42 25 4
gpt4 key购买 nike

在我的应用程序中,我正在创建一个分页 slider (UISlider + UIPageControl)。该应用程序联系 CoreData 以获取要为其创建“页面”的实体数组。

我在以下循环中构建分页滚动条:

for i in 0..<features.count {
var pageWidth = Int(view.frame.width)*i
var pageView = UIView(frame: CGRectMake(CGFloat(pageWidth), 0, scrollView.frame.width, scrollView.frame.height))
pageView.backgroundColor = UIColor.clearColor()
pageView.clipsToBounds = true

//Background image
var imageView = UIImageView(frame: CGRectMake(0, 0, scrollView.frame.width, scrollView.frame.height))
var image:UIImage!
imageView.contentMode = .ScaleAspectFill
pageView.addSubview(imageView)

if fileManager.fileExistsAtPath(features[i].coverImage){
//The background image
image = UIImage(contentsOfFile: self.features[i].coverImage)
imageView.image = image
}
else if !fileManager.fileExistsAtPath(features[i].coverImage) && !features[i].coverImage.isEmpty {
FileStoreClient.downloadFileIfNotExists(features[i].cover, completion: { (success, error) -> Void in
if error == nil {
image = UIImage(contentsOfFile: self.features[i].coverImage)
imageView.image = image
}
else {
println("There was an error during the download")
}
})
}

//The background cover
var coverView = UIView(frame: CGRectMake(0, 0, view.frame.width, 250))
coverView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.6)
pageView.addSubview(coverView)

//The title
var titleLabel = UILabel(frame: CGRectMake(10, 40, view.frame.width-20, 25))
titleLabel.font = UIFont(name: "Haymaker", size: 24)
titleLabel.textColor = UIColor.whiteColor()
titleLabel.layer.shadowColor = UIColor.blackColor().CGColor
titleLabel.layer.shadowOffset = CGSizeMake(1, 1)
titleLabel.layer.shadowRadius = 1
titleLabel.layer.shadowOpacity = 1
titleLabel.textAlignment = .Center
titleLabel.text = features[i].title
pageView.addSubview(titleLabel)

//The text
var textLabel = UILabel(frame: CGRectMake(10, titleLabel.frame.origin.y+titleLabel.frame.height+5, view.frame.width-20, 60))
textLabel.numberOfLines = 0
textLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
textLabel.font = UIFont(name: "OpenSans", size: 13)
textLabel.textColor = UIColor.whiteColor()
textLabel.textAlignment = .Center
textLabel.text = features[i].summary
pageView.addSubview(textLabel)

//The button
var readMoreButton = UIButton(frame: CGRectMake(0, pageView.frame.height - 90, 200, 80))
readMoreButton.setAttributedTitle(NSAttributedString(string: Strings.readMoreButtonTitle, attributes: Fonts.featureButtonText), forState: UIControlState.Normal)
//readMoreButton.addTarget(self, action: "readArticle", forControlEvents: .TouchUpInside)
readMoreButton.layer.cornerRadius = 6
readMoreButton.layer.borderColor = UIColor.whiteColor().CGColor
readMoreButton.layer.borderWidth = 1
readMoreButton.center.x = pageView.center.x
pageView.addSubview(readMoreButton)

println(i)

scrollView.addSubview(pageView)
}

一切都按其应有的方式运行,除了当我尝试为新按钮分配标题时,循环变成了无限循环。如果我打印出循环的当前索引,它会不断循环。示例:

0
1
2
0
1
2
0
1
2

如果我注释掉 myButton.setTitle() 方法,问题就会消失,索引打印如下:

0
1
2

我尝试过setTitle和setAttributedTitle,两者效果是一样的。我尝试过调度不同的队列,但似乎没有任何效果。

同样,一切都适用于背景图像、两个标签、 View 等。仅当将按钮混合在一起时才存在问题。即使我删除 FileStoreManager 代码,该问题仍然存在。

for 循环中的按钮有些不愉快。

<小时/>

编辑#1

我决定尝试创建一个新项目,只是为了在 for 循环中测试按钮创建。这工作得很好。

var x = 20
var y = 20

override func viewDidLoad() {
super.viewDidLoad()

for i in 1...10 {
var myview = UIView(frame: CGRectMake(CGFloat(x), CGFloat(y), 100, 50))
var button = UIButton(frame: CGRectMake(0, 0, 100, 50))
button.setTitle("Test", forState: .Normal)
button.setTitleColor(UIColor.blackColor(), forState: .Normal)
button.layer.borderColor = UIColor.blackColor().CGColor
button.layer.borderWidth = 2
myview.addSubview(button)
view.addSubview(myview)
x = x+20
y = y+20
println(i)
}
}

最佳答案

您还可以尝试快速枚举,以防某些内容在您的范围内出现困惑。

for feature in features { ... }

或者如果您需要索引:

for (index, features) in features.enumerate() { ... }

不确定它会解决问题,但它可能会提高可读性。

关于ios - 在 FOR 循环中创建和设置 UIButton 的标题会中断循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32663278/

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