Делегат протокола не дает желаемого результата - PullRequest
0 голосов
/ 06 августа 2020

Простая страница профиля с изображением для отображения в зависимости от того, что я выбираю на странице настроек, различных файлов для контроллера и представления, щелкните галочку профиля go на странице настроек, выберите изображение1 или изображение2, и это изображение должно отображаться на странице профиля я пытаюсь создать протокол в настройках, чтобы иметь возможность добавлять изображение, а затем реализовать делегат в файле просмотра профиля, чтобы он мог обновлять изображение, которое не работает, может ли кто-нибудь указать на мою ошибку

SettingsController

import UIKit

protocol ShowImage: class {
    func displayImage(_ of: UIImage)
}

class SettingsController: UIViewController {
   
    weak var delegate: ShowImage?
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
      
        let settings = SettingsView()
        view.addSubview(settings.view)
        settings.btn1.addTarget(self, action: #selector(dCode), for: .touchUpInside)
      

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

    
   
    
    @objc func dCode() {
       
        let image = UIImage(named: "homei")
        delegate?.displayImage(image!)
        
        navigationController?.pushViewController(ProfileController(), animated: true)
    }
    
    
   
     
    
    
   
}

SettingsView

import UIKit

class SettingsView: UIViewController {
    
    var btn1 = UIButton()
       var btn2 = UIButton()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.translatesAutoresizingMaskIntoConstraints = false
        view.heightAnchor.constraint(equalToConstant: UIScreen.main.bounds.height).isActive = true
        view.widthAnchor.constraint(equalToConstant: UIScreen.main.bounds.width).isActive = true
        view.backgroundColor = UIColor.white
        btn1.heightAnchor.constraint(equalToConstant: 30).isActive = true
              btn1.widthAnchor.constraint(equalToConstant: 150).isActive = true
        btn1.setTitleColor(UIColor.red, for: .normal)
        btn1.backgroundColor = UIColor.green
              btn2.heightAnchor.constraint(equalToConstant: 30).isActive = true
              btn2.widthAnchor.constraint(equalToConstant: 150).isActive = true
              btn2.setTitleColor(UIColor.red, for: .normal)
                     btn2.backgroundColor = UIColor.green
              btn1.setTitle("Image1", for: .normal)
              btn2.setTitle("Image2", for: .normal)
              
              let stackP = UIStackView()
              
              stackP.axis = .horizontal
              stackP.alignment = .top
              stackP.spacing = 10
              stackP.distribution = .fill
              
              stackP.addArrangedSubview(btn1)
              stackP.addArrangedSubview(btn2)
              stackP.translatesAutoresizingMaskIntoConstraints = false
              
              view.addSubview(stackP)
              
              stackP.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
              stackP.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
              
        // Do any additional setup after loading the view.
    }
    

}

Profile Controller

import UIKit

class ProfileController: UIViewController {
   
    
 let profile = ProfileView()
    override func viewDidLoad() {
        super.viewDidLoad()
       
        view.addSubview(profile.view)
        
        // Do any additional setup after loading the view.
        profile.settingsBtn.addTarget(self, action: #selector(gotoSettings), for: .touchUpInside)
    }
  
    
    @objc func gotoSettings(){
        let settings = SettingsController()
  
        
        navigationController?.pushViewController(settings, animated: true)
    }
    
   

}

Profile View

import UIKit

class ProfileView: UIViewController, ShowImage{
    func displayImage(_ of: UIImage) {
        apply(img: of)
    }
    
    
    

    var bgImage = UIImageView()
    var settingsBtn = UIButton()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.translatesAutoresizingMaskIntoConstraints = false
        view.heightAnchor.constraint(equalToConstant: UIScreen.main.bounds.height).isActive = true
        view.widthAnchor.constraint(equalToConstant: UIScreen.main.bounds.width).isActive = true
        bgImage.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(bgImage)
        bgImage.heightAnchor.constraint(equalToConstant: UIScreen.main.bounds.height).isActive = true
        bgImage.widthAnchor.constraint(equalToConstant: UIScreen.main.bounds.width).isActive = true
        
        
        settingsBtn.heightAnchor.constraint(equalToConstant: 60).isActive = true
        settingsBtn.widthAnchor.constraint(equalToConstant: 60).isActive = true
       // settingsBtn.setTitle("Settings", for: .normal)
        settingsBtn.setImage(UIImage(named: "tick"), for: .normal)
        settingsBtn.backgroundColor = UIColor.red
        settingsBtn.layer.cornerRadius = 5
        view.addSubview(settingsBtn)
        settingsBtn.translatesAutoresizingMaskIntoConstraints = false
        settingsBtn.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -30).isActive = true
        settingsBtn.topAnchor.constraint(equalTo: view.topAnchor, constant: 70).isActive = true
        
        let set = SettingsController()
        set.delegate = self
        // Do any additional setup after loading the view.
    }
    
    func apply(img: UIImage)
    {
        bgImage.image = img
    }
    
   
    

}

введите описание изображения здесь

enter image description here

введите описание изображения здесь

1 Ответ

0 голосов
/ 06 августа 2020
let set = SettingsController()
set.delegate = self

Вы создаете новый SettingsController, устанавливаете его делегата ... и ничего не делаете с ним. Вы, вероятно, захотите найти существующий SettingsController, который находится на экране, хотя у вас здесь очень запутанная система с xView и xController, оба из которых являются контроллерами представления, поэтому трудно понять, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...