2017-07-06 5 views
1

Je souhaite transférer l'image sur le bouton d'un bouton du contrôleur 1ère vue au 2ème contrôleur. Je ne peux pas comprendre que j'ai même donné la référence de mon 1 contrôleur de vue de mon 2ème contrôleur puis aussi le délégué n'est pas appeléLe délégué ne peut pas appeler le contrôleur 2ème vue

1.Heres mon code pour le contrôleur 1ère vue

protocol ViewControllerDelegate: class{ 
func Imagine(get: UIImage?) 
} 
class ViewController: UIViewController { 
let button = UIButton() 
weak var delegate:ViewControllerDelegate? 
var image = UIImage(named:"face1.png") 
override func viewDidLoad() { 
    super.viewDidLoad() 
    addButton() 
    addConstraints() 

    // Do any additional setup after loading the view, typically from a nib. 
} 


func addButton() -> Void { 
    button.setImage(UIImage(named:"face1.png"), for: .normal) 
    button.layer.borderColor = UIColor.white.cgColor 
    button.clipsToBounds = true 
    button.showsTouchWhenHighlighted = true 
    button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside) 
    view.addSubview(button) 
} 
func buttonPressed() -> Void { 
    pressed() 
    let alert = UIAlertController(title: "Alert", message: "Image sent to Tab 3", preferredStyle: UIAlertControllerStyle.alert) 
    let ok = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil) 
    alert.addAction(ok) 
    self.present(alert, animated: true, completion:nil) 

} 

func addConstraints() -> Void { 
    button.snp.makeConstraints { (make) in 
     make.width.height.equalTo(150) 
     make.center.equalToSuperview() 
     } 

} 

func pressed(){ 
    delegate?.Imagine(get: UIImage(named:"face1.png")) 
} 


} 

2. Voici le code pour le contrôleur 2ème vue

class ViewController3: UIViewController, ViewControllerDelegate{ 
var imageView=UIImageView() 
var obj:ViewController? 
override func viewDidLoad() { 
    super.viewDidLoad() 
    view.backgroundColor = UIColor.white 
    // getImage = UIImage(named: "face3.png") 
    addView() 
    addConstraints() 
    **obj.delegate = self** 
} 


func addView() -> Void{ 

    view.addSubview(imageView) 
} 


func addConstraints() -> Void { 
    imageView.snp.makeConstraints { (make) in 
     make.width.height.equalTo(150) 
     make.center.equalToSuperview() 
            } 
    } 
//NOT Called 
    func Imagine(get: UIImage?) { 
    imageView.image = get 
} 
} 

3.And ici est mon bar onglet contrôleur

class ViewController4: UITabBarController ,UITabBarControllerDelegate { 
var v:ViewController? 
override func viewDidLoad() { 
    super.viewDidLoad() 
    view.backgroundColor = UIColor.white 
    self.delegate = self 
} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(true) 

    let tab1 = ViewController() 
    let tab1BarItem = UITabBarItem(title: "Tab1", image:UIImage(named:"bell-off-7.png"), selectedImage:UIImage(named:"bell-7.png")) 
    tab1.tabBarItem = tab1BarItem 


    let tab2 = ViewController2() 
    let tab2BarItem = UITabBarItem(title: "Tab2", image: UIImage(named:"bell-off-7.png"), selectedImage: UIImage(named:"bell-7.png")) 
    tab2.tabBarItem = tab2BarItem 


    let tab3 = ViewController3() 

    let tab3BarItem = UITabBarItem(title: "Tab3", image:  UIImage(named:"bell-off-7.png"), selectedImage: UIImage(named:"bell-7.png")) 
    tab3.tabBarItem = tab3BarItem 
    self.viewControllers = [tab1,tab2,tab3] 
} 

} 

Répondre

0

Vous devez définir l'image lorsque vous changez d'onglet. Actuellement, vous modifiez l'image d'un viewController qui n'est pas encore affiché.

Vous pouvez ajouter un tag à chaque élément et utiliser la fonction didSelectViewController délégué

En tabBar ViewController ajouter une tappedImage variables comme

var tappedImage:UIImage? 
override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(true) 

    let tab1 = ViewController() 
    let tab1BarItem = UITabBarItem(title: "Tab1", image:UIImage(named:"bell-off-7.png"), selectedImage:UIImage(named:"bell-7.png")) 
    tab1BarItem.tag = 0 
    tab1.tabBarItem = tab1BarItem 


    let tab2 = ViewController2() 
    let tab2BarItem = UITabBarItem(title: "Tab2", image: UIImage(named:"bell-off-7.png"), selectedImage: UIImage(named:"bell-7.png")) 
    tab2BarItem.tag = 1 
    tab2.tabBarItem = tab2BarItem 


    let tab3 = ViewController3() 

    let tab3BarItem = UITabBarItem(title: "Tab3", image:  UIImage(named:"bell-off-7.png"), selectedImage: UIImage(named:"bell-7.png")) 
    tab3BarItem.tag = 2 
    tab3.tabBarItem = tab3BarItem 
    self.viewControllers = [tab1,tab2,tab3] 
} 

    func Imagine(get: UIImage?) { 
     tappedImage = get 
    } 

     func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) { 
      if let secondVC = viewController as? ViewController2 { 
       secondVC.selectedImage = tappedImage 
      } 
     } 

Dans ViewController2 de viewWillAppear définir la tappedImage comme l'image de la imageView

+0

ya thats ce que je veux demander comment puis-je faire cela entre commutation – vasu

+0

pas cela ne fonctionne pas – vasu

+0

Quelle est l'erreur que vous obtenez? –