视图控制器仅在第一次正确加载图像

时间:2017-10-28 04:29:59

标签: ios swift

我使用视图控制器动态显示带图像的按钮和按钮。我在我的应用程序的不同级别重新使用此视图控制器。第一次打开它时,它正确显示图像。当我退后一步并重新打开相同的视图时,它会显示所有按钮上加载的最后一个图像。

下面是屏幕截图,显示它第一次正常工作但不是第二次。我做错了什么?

正确:

Correct

显示所有相同的图片:

Showing all the same image

相关守则:

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
}

2 个答案:

答案 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)