无法从Wikipedia API中恢复图像并在另一个视图控制器中显示它

问题描述 投票:0回答:1

我有一个应用程序,该应用程序从Wikipedia API获取数据,并将其显示在另一个视图控制器中。具体来说,它会显示在文本字段中键入的关键字的摘录/定义(在文本视图中显示),并且还应显示用于说明该关键字的图像维基百科。

我的问题是文本数据显示在新的视图控制器中,而不显示在图像中。

由于我的应用程序相对较短,所以让我显示两个视图控制器的完整代码。

  1. 首先是通过http调用从Wikipedia获取信息的视图控制器的代码
import Alamofire
import SwiftyJSON
import SDWebImage // me permet d'ajouter une image venant de wikipedia pour illustrer mon paragraphe recherché

class ViewController: UIViewController {

    @IBOutlet weak var textEntryLabel: UITextField!
    @IBOutlet weak var segueButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        //darkMode()
        // on appelle la fonction qui gere les couleurs alternatives lorsque dark mode est detecté
        if traitCollection.userInterfaceStyle == .dark {
            darkMode()
        }

    }

    //MARK: - Relevant variables
    let wikipediaURl = "https://en.wikipedia.org/w/api.php"
    var termDefinitionInfo: String = ""
    var illustration = UIImageView()
    let segueName: String = "toDefinition"

    //MARK: - Button tapped action

    @IBAction func buttonToDefinition(_ sender: UIButton) {
        // on appelle la fonction ici
        httpCall(termDefinition: textEntryLabel.text ?? "Nothing to verify")
    }

    //MARK: - handles what needs to be done prior to triggering the segue

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == segueName {

            if let secondVC = segue.destination as? DefinitionViewController {
                //secondVC.imageIllustrative = illustration.image
                secondVC.definition = termDefinitionInfo
                secondVC.imageIllustrative = illustration.image


            } else {
                fatalError("Could not perform request!")
            }

        }
    }

    //MARK: - NETWORKING

      func httpCall(termDefinition: String) {
        let parameters : [String:String] = [
               "format" : "json",
               "action" : "query",
               "prop" : "extracts|pageimages",
               "exintro" : "",
               "explaintext" : "",
               "titles" : termDefinition,
               "indexpageids" : "",
               "redirects" : "1",
               "pithumbsize" : "250"
               ]

          //
          request(wikipediaURl, method: .get, parameters: parameters).responseJSON { (response) in
              if response.result.isSuccess {
                //1. on affiche le tableau json initial
                let definitionJSON: JSON = JSON(response.result.value)
                print(definitionJSON)

                // 3 valeurs : pageID,definition et source de l'image
                let pageId = definitionJSON["query"]["pageids"][0].stringValue
                let pageDefinition = definitionJSON["query"]["pages"][pageId]["extract"].stringValue

                let imageSource = definitionJSON["query"]["pages"][pageId]["thumbnail"]["source"].stringValue
                //on attache ces valeurs extraites aux bonnes variables
                self.illustration.sd_setImage(with: URL(string: imageSource))
                self.termDefinitionInfo = pageDefinition



                // cas ou on n'a pas de definition
                if pageDefinition == "" {
                    self.termDefinitionInfo =  "Désolé,ce que vous cherchez ne se trouve pas sur Wikipedia"
                }

                // et on effectue le segue vers le second view controller ici
                self.performSegue(withIdentifier: "toDefinition", sender: self)
                print(self.termDefinitionInfo)

              } else {
                print("Error! Could not fetch data!")
            }
          }
      }

    //MARK: - FONCTION QUI GERE LES COULEURS POUR LE DARK MODE
    func darkMode() {
        //la couleur du texte de la barre de navigation ici blanc
        navigationController?.navigationBar.tintColor = UIColor.white
        // la couleur du text du placeholder ici bleu
        textEntryLabel.attributedPlaceholder = NSAttributedString(string: "Saisir ici le terme à rechercher", attributes: [NSAttributedString.Key.foregroundColor: UIColor.systemBlue])
        // la couleur du text
        textEntryLabel.textColor = UIColor.label
        //la couleur du texte du bouton ici blanc
        segueButton.setTitleColor(UIColor.black, for: .normal)

        //la couleur de fonds du bouton
        segueButton.backgroundColor = UIColor.white
        //la couleur de la bordure du bouton
        segueButton.layer.borderColor = UIColor.white.cgColor
        segueButton.layer.borderWidth = 1
    }

}

  1. 这是第二个视图控制器的代码(用于显示摘录和图像)
import SwiftyJSON
import Alamofire
import SDWebImage

class DefinitionViewController: UIViewController {

    @IBOutlet weak var definitionIllustrationImageView: UIImageView!
    @IBOutlet weak var definitionTextView: UITextView!


    // on cree deux variables pour attacher l'image illustrative et la definition

    var definition: String?
    var imageIllustrative: UIImage?



    override func viewDidLoad() {
        super.viewDidLoad()

        //definitionTextView.text = donnees
        definitionTextView.text = definition
       // definitionIllustrationImageView.image = imageIllustrative

        // Do any additional setup after loading the view.
    }


}
ios swift xcode alamofire segue
1个回答
0
投票

如果所有内容都正确连接到IB,那么您只需要取消注释将图像分配给图像视图的代码即可:

更改

// definitionIllustrationImageView.image = imageIllustrative

to

definitionIllustrationImageView.image = imageIllustrative
© www.soinside.com 2019 - 2024. All rights reserved.