2017-07-06 54 views
1

我想单击第一个视图控制器中的按钮将图像传递给第二个控制器。我无法知道,即使我已经给我的1个视图控制器到我的第二控制器则第一视图,控制器代表无法在第二个视图控制器中调用

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的参考也委托不叫

1.Heres我的代码。这里是第二个视图控制器

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这里的代码是我的标签栏控制器

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

} 

回答

0

当您切换选项卡时,您必须设置图像。 目前,你正在做的是你正在改变尚未显示的viewController的图像。

您可以添加标签到每个项目,并利用didSelectViewController委托功能的

在的TabBar视图控制器添加像

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

可变tappedImage在ViewController2的viewWillAppear设置tappedImageimageView的形象

+0

雅是多数民众赞成我想问我怎么能在切换之间 – vasu

+0

没有这是行不通的 – vasu

+0

什么是错误你得到了什么? –

相关问题