我使用视图控制器动态显示带图像的按钮和按钮。我在我的应用程序的不同级别重新使用此视图控制器。第一次打开它时,它正确显示图像。当我退后一步并重新打开相同的视图时,它会显示所有按钮上加载的最后一个图像。
下面是屏幕截图,显示它第一次正常工作但不是第二次。我做错了什么?
正确:
显示所有相同的图片:
相关守则:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.navigationController?.navigationBar.isHidden = false
AddImages()
ListFolders()
}
func ListFolders(){
do {
let filemgr = FileManager.default
let filelist = try filemgr.contentsOfDirectory(atPath: BaseFolder + "/Edussentials/Home/" + MyFolder)
for file in filelist {
if (MyFunctions().mid(file,0,4) == "BUT_") || (MyFunctions().mid(file,0,4) == "IBT_") {
IncreaseMyArrays()
MyButton_Name[ButtonCount] = MyFunctions().mid(file, 4, 50)
MyButton_Type[ButtonCount] = MyFunctions().mid(file, 0, 4)
ReadButtons(ButtonFolder: BaseFolder + "/Edussentials/Home/" + MyFolder + "/" + file)
ButtonCount += 1
}
}
CreateIButtons()
CreateButtons()
} catch let error {
print("Error: \(error.localizedDescription)")
}
}
func CreateIButtons(){
var i: Int = 0
repeat {
if (MyButton_Type[i] == "IBT_"){
let button = UIButton(frame: CGRect(x: Int(MyDisplayWidth / 100 * Float(MyButton_xPos[i])), y: Int(MyDisplayHeight / 100 * Float(MyButton_yPos[i] + MySetFromTop)), width: Int(MyDisplayWidth / 100 * Float(MyButton_Width[i])), height: Int(MyDisplayHeight / 100 * Float(MyButton_Height[i]))))
let imageURL = URL(fileURLWithPath: BaseFolder + "/Edussentials/Home/" + MyFolder + "/IBT_" + MyButton_Name[i] + "/MyImage.gif")
let MyImage = UIImage(named: imageURL.path)!
button.setImage(MyImage, for: UIControlState.normal)
button.tag = i
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
self.view.addSubview(button)
}
i += 1
} while i < ButtonCount
}
答案 0 :(得分:1)
正如您所说,您正在多次重复使用该视图进入您的应用。在这里,您已将if
用于自定义视图,但忘记实施else
以使该视图进入原始状态。
在每else
后,使用if
将代码设置为默认状态。
答案 1 :(得分:0)
指向图像的正确方法是使用UIImage(contentsOfFile:“MyFullPath”)而不是UIImage(名称:“MyFullPath”) 问题是我的所有图像都具有相同的名称,但位于不同的目录中。出于某种原因,UIImage dit会在第一次调用视图时获得正确的图像。但是,第二次调用视图时,它指向最后找到的目录,因此在每个按钮上显示相同的图像。
button.setImage(UIImage(contentsOfFile: BaseFolder + "/Edussentials/Home/" + MyFolder + "/IBT_" + MyButton_Name[i] + "/MyImage.gif"), for: UIControlState.normal)