大家好,我想参加一个帮助课程,该课程将所有图片设置为按钮。但是图片总是零:(我的错误在哪里?
第1类(发生动作的地方)
class RandomClass {
let imageSetter = ImageSetter()
let mvc = MainViewController()
func actionWhenConnected(){
imageSetter.setButtonImages(nameOfButton: mvc.ConnectingButtonLabel, nameOfImage: "Connection/ConnectionOn", nameOfColor: .green, forStatus: .normal)
}
}
这意味着调用该函数时,MainViewController中的图像应切换为绿色的“图片连接”
第2类(助手类)
class ImageSetter{
func setButtonImages(nameOfButton:UIButton, nameOfImage:String, nameOfColor:UIColor, forStatus:UIControl.State){
nameOfButton.setImage(UIImage(named: nameOfImage), for: forStatus)
let origImage = UIImage(named: nameOfImage)
let tintedImage = origImage?.withRenderingMode(.alwaysTemplate)
nameOfButton.setImage(tintedImage, for: .normal)
nameOfButton.tintColor = nameOfColor
}
}
在我的MainViewController中,它可以工作:( 似乎RandomClass无法访问asset.xcassets,因为它找不到图像的名称?
已解决!
func actionWhenConnected(){
let mvc = UIApplication.shared.keyWindow?.rootViewController as! MainViewController
imageSetter.setButtonImages(nameOfButton:mvc.ConnectingButtonLabel, nameOfImage: "Connection/ConnectionOff", nameOfColor: .red, forStatus: .normal)
}
非常感谢@matt
答案 0 :(得分:-1)
问题是这一行:
func capitalize(string: String, positions: IndexSet) -> String {
guard string.count > 0 else {
fatalError("There is nothing to capitalize")
}
let zeroBasedPositions = positions.map {$0 - 1}
guard zeroBasedPositions.allSatisfy({ $0 >= 0 }) else {
fatalError("The positions should be one-based")
}
let letterIndexes = string
.enumerated()
.filter { (index, char) in
CharacterSet(charactersIn: String(char))
.isSubset(of: CharacterSet.letters)
}.map { $0.0 }
guard let positionsMax = zeroBasedPositions.max(),
positionsMax <= letterIndexes.count
else {
fatalError("There are only \(letterIndexes.count) letters")
}
let lettersToCapitalizeIndexes = zeroBasedPositions.map { letterIndexes[$0] }
return String(string.enumerated().map{ (index, char) in
if lettersToCapitalizeIndexes.contains(index) {
return String(char).capitalized.first!
} else {
return char
}
})
}
var str = "there are 12 months in a year"
capitalize(string: str, positions: [4, 6]) //"theRe Are 12 months in a year"
考虑一下短语let mvc = MainViewController()
的作用!它创建一个新的MainViewController单独的第二个实例。因此,视图永远不会从情节提要中加载,也不会钩住按钮的插座,从而导致崩溃。
您想要的是对实际MainViewController实例的引用,该实例的视图已存在于您的接口中。那就是带有您可以看到的按钮的那个。
在我的MainViewController中有效
是的,因为在MainViewController中您知道如何获取对此实例的引用-您只需说MainViewController()
。但是,即使您说self
,即使在那也行不通。
似乎RandomClass无法访问asset.xcassets,因为它找不到图像的名称?
是的。它找到图像。没有什么是 button 。