如何在推动目标视图控制器之前设置图像



我想在目标视图控制器的"配置文件"按钮上显示图像,但是当我试图从源视图控制器分配映像时,它正在崩溃,因为我的" proficpicpicbutton"为nil。/p>

let cell = tableView.cellForRow(at: indexPath) as! FacebookTableViewCell
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let objFriendsDetailViewController = storyBoard.instantiateViewController(withIdentifier: "FriendsDetailViewController") as! FriendsDetailViewController
    objFriendsDetailViewController.friendsName = cell.friendsName.text! //Can Assign Data to the property "friendsName"
    objFriendsDetailViewController.remindersDataDict = ["birthDay":cell.friendsBirthDay.text!] //Can Assign Data to the property "remindersDataDict"
    let image = cell.profilePicButton.image(for: .normal)
    print(objFriendsDetailViewController)
    print(objFriendsDetailViewController.remindersTableView) //It says nil
    print(objFriendsDetailViewController.profilePicButton) //It says nil
    objFriendsDetailViewController.profilePicButton.setImage(image, for: .normal) //Can't Assign Image to the property "profilePicButton"
    self.navigationController?.pushViewController(objFriendsDetailViewController, animated: true)

如何将图像从源视图控制器设置为目标视图控制器中的按钮?

目的地视图控制器的UI组件是在触发push时未设置。UI组件的实际位置位于 set 模式下是您的视图控制器的viewDidLoad()。因此,您正在尝试在UI实际上从未设置 set 状态之前设置图像。并且您的Button是隐式解开的可选可选的,它告诉,如果在初始化之前访问或在值为nil为nil nil 的情况下访问,则

现在,这不是实现自己尝试的方法。这样做的实际方法是:

  • 在目标视图控制器上有一个属性
  • 初始化目标视图控制器
  • 时,将对象传递到该属性
  • 当目标视图控制器准备就绪时(本质上是viewDidLoad()(,您可以使用该属性更新相应的视图
 let image = cell.profilePicButton.image(for: .normal)
print(objFriendsDetailViewController)
print(objFriendsDetailViewController.remindersTableView) //It says nil
print(objFriendsDetailViewController.profilePicButton) //It says nil
//These are nil because  Controller from storyboard does come into memory yet 
objFriendsDetailViewController.imageFromPreviousButton = image
self.navigationController?.pushViewController(objFriendsDetailViewController, animated: true)

而不是你可以做

   Class  FriendsDetailViewController: UIViewController {
    var imageFromPreviousButton = UIImage()
    @IBOutlet var profilePicButton: UIButton!
     Override func viewDidLoad() {
       profilePicButton.setImage(imageFromPreviousButton, for: .normal)
     }
}

最新更新