簡體   English   中英

協議委托未給出預期結果

[英]Protocol delegate not giving desired result

A simple profile page with an image to display based on what i select on the settings page, different files for controller and view, click on tick of profile go to settings page, select image1 or image2 and that image must display on profile page,i嘗試在設置上創建一個協議以便能夠添加圖像,然后在配置文件視圖文件上實現一個委托,以便它可以更新它不起作用的圖像,任何人都可以指出我的錯誤

設置控制器

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)
    }
    
    
   
     
    
    
   
}

設置視圖

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.
    }
    

}

型材 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)
    }
    
   

}

配置文件視圖

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
    }
    
   
    

}

在此處輸入圖像描述

在此處輸入圖像描述

在此處輸入圖像描述

let set = SettingsController()
set.delegate = self

你正在制作一個全新的SettingsController ,設置它的委托......然后什么都不做。 您可能希望找到屏幕上現有的SettingsController ,盡管這里的系統非常混亂,其中xViewxController都是視圖控制器,因此很難知道發生了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM