如何将图像从 TableViewCell 传递到 UIImage
Posted
技术标签:
【中文标题】如何将图像从 TableViewCell 传递到 UIImage【英文标题】:How to pass Image from from TableViewCell to UIImage 【发布时间】:2016-11-26 07:07:19 【问题描述】:My segues我想弄清楚是否有办法将我选择的单元格中的图像传递给一个完全不同的视图控制器中的新UIImageView
。我不完全理解 segue 是如何工作的,经过数小时的审议,我还没有完全找到解决方案。我已经能够在tableview
中显示我的图像,但我想将所选图像发送到UIImageView
以获得更大的图片视图。我目前为此有 2 个 VC。其中第一个称为TableView
import UIKit
class TableView: UITableViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate
@IBAction func toImage(_ sender: Any)
performSegue(withIdentifier: "ImageView", sender: self)
// Properties
var imagesDirectoryPath:String!
var images:[UIImage]!
var titles:[String]!
@IBAction func choosePhoto(_ sender: AnyObject)
let imagePicker = UIImagePickerController()
if UIImagePickerController.isSourceTypeAvailable(.camera)
imagePicker.sourceType = .photoLibrary
print("Library selected")
else
print("No cam here!")
present(imagePicker, animated: true, completion: nil)
imagePicker.delegate = self
override func viewDidLoad()
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier:"CellID")
images = []
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
// Get the Document directory path
let documentDirectorPath:String = paths[0]
// Create a new path for the new images folder
imagesDirectoryPath = documentDirectorPath + "/ImagePicker"
var objcBool:ObjCBool = true
let isExist = FileManager.default.fileExists(atPath: imagesDirectoryPath, isDirectory: &objcBool)
// If the folder with the given path doesn't exist already, create it
if isExist == false
do
try FileManager.default.createDirectory(atPath: imagesDirectoryPath, withIntermediateDirectories: true, attributes: nil)
catch
print("Something went wrong while creating a new folder")
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
func refreshTable()
do
images.removeAll()
titles = try FileManager.default.contentsOfDirectory(atPath: imagesDirectoryPath)
for image in titles
let data = FileManager.default.contents(atPath: imagesDirectoryPath + "/\(image)")
let image = UIImage(data: data!)
images.append(image!)
self.tableView.reloadData()
catch
print("Error")
//MARK: UIImagePickerControllerDelegate Protocol
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?)
// Save image to Document directory
var imagePath = Date().description
imagePath = imagePath.replacingOccurrences(of: " ", with: "")
imagePath = imagesDirectoryPath + "/\(imagePath).png" //this would change depending on the name of the image
let data = UIImagePNGRepresentation(image)
_ = FileManager.default.createFile(atPath: imagePath, contents: data, attributes: nil)
dismiss(animated: true) () -> Void in
self.refreshTable()
//MARK: UITableView DataSource
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell:UITableViewCell! = tableView.dequeueReusableCell(withIdentifier: "CellID")
cell?.imageView?.image = images[indexPath.row]
cell.textLabel?.text = titles[indexPath.row]
return cell
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return images.count
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
performSegue(withIdentifier: "ImageView", sender: images[indexPath.row])
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
var secondVC : ImageView = segue.destination as! ImageView
//secondVC.fullView = imagesDirectoryPath[IndexPath.row]
这是我的ImageView
,我希望我的单元格中的图像出现在这里。
import UIKit
class ImageView:ViewController
@IBOutlet var fullView: UIImageView!
var selectedImage = UIImage()
override func viewDidLoad()
super.viewDidLoad()
self.fullView.image = self.selectedImage //Assign selected Image here
//segue via a button
@IBAction func toTable(_ sender: Any)
performSegue(withIdentifier: "TableView", sender: self)
那么有什么方法可以将现有图像传递给另一个 VC 中的 UIImageView
。我梳理了整个谷歌,但我似乎无法弄清楚。
谢谢!
【问题讨论】:
检查你的类声明继承。class ImageViewController : UIViewController ...
我将 ImageView 更改为 SecondViewController 并添加了 UIViewController 而不是 ViewController,但仍然出现相同的错误。
查看storyboard文件中vc的nib上的类声明。它也需要是SecondViewController
所有声明看起来都正确。我仔细检查了所有的标识符,但它仍然给我同样的错误。如果您想查看代码的任何屏幕截图,请告诉我。
【参考方案1】:
在您的故事板文件中,确保在 segue 目标的笔尖上将自定义类设置为 SecondViewController
:
【讨论】:
是的,当我将 ImageView 的名称更改为 SecondViewController 时,我更改了它。错误指向此特定行:' let secondVC : SecondViewController = segue.destination as!第二视图控制器 ' . 在该处和控制台中放置断点po type(of: segue.destination)
它告诉我它“无法将 'Lab9.ViewController' (0x102682bc0) 类型的值转换为 'Lab9.SecondViewController' (0x102682af8)。” ViewController 是一个不同的视图控制器,我不明白为什么它会出现在这里。
您的故事板文件中是否有多个转场?
呜呼。非常感谢!我不知道没有必要回到以前的观点。现在我终于可以睡觉了!以上是关于如何将图像从 TableViewCell 传递到 UIImage的主要内容,如果未能解决你的问题,请参考以下文章
将数据从 tableviewcell 传递到另一个 viewcontroller
无法使用 Swift 将图像 url 从 JSON(API) 绑定到 tableviewcell
Swift iOS - 如何将直接从 TableViewCell 的子类中获取的值传递给 TableView 的 didSelectRow?
如何通过单击swift4中的addImage按钮将图像一张一张添加到tableviewcell中