【问题标题】:how to check for multiple images != nil如何检查多个图像!= nil
【发布时间】:2020-10-03 11:22:19
【问题描述】:

我正在尝试使用 if 语句和 && 运算符检查多个 UIImageView != nil 是否存在,但问题是当用户选择 3 driverPImg.image != nil && passImg.image != nil && carImg.image != nil 的任何照片时,下一个代码会出现并且它不会检查休息条件

此图像显示 3 个水平排列的图像,在 Btn 将颜色变为红色之前,所有这些图像都应该被填充或不为零,但它假设发生的事情没有发生

extension VC: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
            
        if let editedImg = info[.editedImage] as? UIImage {
            
            SelectedImg = editedImg.withRenderingMode(.alwaysOriginal)
            
        } else if let originalImg = info[.originalImage] as? UIImage {
            SelectedImg = originalImg.withRenderingMode(.alwaysOriginal)
            
        }
        
        if let image = SelectedImg {
            if pictureSelectionType == .profilePicture {
                driverPImg.image = image
                
            }else if pictureSelectionType == .idPicture{
                passImg.image = image
                
            }else if pictureSelectionType == .vhiclePicture{
                carImg.image = image
                
            }else {
                backCarImg.image = image
                
            }

            if driverPImg.image != nil && passImg.image != nil && carImg.image != nil{
                sendApplyBtn.backgroundColor = UIColor.delevareColor
            }else {
                sendApplyBtn.backgroundColor = UIColor.lightGray
            }
            
            
        }
        dismiss(animated: true, completion: nil)
    }
        
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        self.dismiss(animated: true, completion: nil)
    }
    
}

【问题讨论】:

  • 你能澄清你想要达到的目标吗?如果没有选择任何图像,或者任何一张图像为 nil,按钮是否应该为浅灰色?
  • 不,同样的结果
  • 该按钮只是用于检查条件,所以它已经是灰色的,在完成所有三个图像后,它应该变成红色,这是我想要做的,但我面临的是当一张图片不是nil 时,btn 会变为红色
  • 那么你的逻辑是正确的。你确定其他图片是nil吗?设置断点并使用调试器检查
  • 如果您对选择类型使用switch 语句而不是一系列 if/else,您的代码可能会更清晰

标签: ios swift xcode if-statement uiimageview


【解决方案1】:

您可以使用占位符进行检查,这意味着您的占位符图像是否名为“placeHolder.png”

if driverPImg.image == UIImage(named: "placeHolder.png") && passImg.image == UIImage(named: "placeHolder.png") && carImg.image == UIImage(named: "placeHolder.png") {
sendApplyBtn.backgroundColor = UIColor.lightGray

            }else {
                  sendApplyBtn.backgroundColor = UIColor.delevareColor
            }

【讨论】:

    【解决方案2】:

    我使用您的代码并在操场上创建了一个 sn-p。它似乎工作正常,我已经初始化了代码工作所需的变量。

    var btnColor = UIColor.gray
    
    var SelectedImg: UIImage? = UIImage.init(systemName: "house")
    
    enum PictureSelectionType {
        case profilePicture
        case idPicture
        case vhiclePicture
    }
    
    var pictureSelectionType: PictureSelectionType? = .idPicture
    
    var driverPImg: UIImageView! = UIImageView()
    var passImg: UIImageView! = UIImageView()
    var carImg: UIImageView! = UIImageView()
    var backCarImg: UIImageView! = UIImageView()
    
    func imagePickerController() {
        
    //    if let editedImg = info[.editedImage] as? UIImage {
    //
    //        SelectedImg = editedImg.withRenderingMode(.alwaysOriginal)
    //
    //    } else if let originalImg = info[.originalImage] as? UIImage {
    //        SelectedImg = originalImg.withRenderingMode(.alwaysOriginal)
    //
    //    }
        
        if let image = SelectedImg {
            if pictureSelectionType == .profilePicture {
                let image = UIImage()
                driverPImg.image = image
                
            }else if pictureSelectionType == .idPicture{
                passImg.image = image
                
            }else if pictureSelectionType == .vhiclePicture{
                carImg.image = image
                
            }else {
                backCarImg.image = image
            }
            
            if driverPImg.image != nil && passImg.image != nil && carImg.image != nil{
                btnColor = UIColor.red
                print("Red color")
            }else {
                btnColor = UIColor.lightGray
                print("Gray color")
            }
        }
    }
    
    imagePickerController()
    pictureSelectionType = .profilePicture
    imagePickerController()
    pictureSelectionType = .vhiclePicture
    imagePickerController()
    

    确保先前选择的图像已保存且不会因条件生效而无效。

    【讨论】:

    • 如果你给第一张图片一个 UIImage let image = UIImage() driverPImg.image = image 你会变红,即使第二张或第三张仍然是`nil
    • 我已经编辑了你的答案,你可以照原样复制代码
    猜你喜欢
    • 2017-09-20
    • 2018-10-18
    • 2011-03-03
    • 2019-06-10
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多