我有个带手机的tableView。在这个单元格中,我有一个imageView,并有一个覆盖它的按钮。该按钮有一个IBAction。当被点击时,这个按钮应该会召唤imagePicker。IBAction代码位于单元格子视图中。
@IBAction func MyStatusImageButtonAction(sender: AnyObject) {
// Select Image
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
imagePicker.allowsEditing = false
self.presentViewController(imagePicker, animated: true, completion: nil)因为这一行,我得到了一个错误。
self.presentViewController(imagePicker, animated: true, completion: nil)错误说明"myCell“类型的"Value”没有成员"presentViewController“。
我是否应该将imagePicker加载到托管该单元的viewController中,然后以某种方式将其传输到该单元?我是不是应该用不同的代码加载单元中的imagePicker?我说的全错了吗?
为了清楚起见,我的目标是让用户加载此TableViewController,并且能够仅将图像分配给此单元中的imageView。
谢谢。
发布于 2015-12-05 16:24:26
编写一个协议,您的TableViewController将为您显示它。
protocol ImagePickerDelegate {
func pickImage()
}在你的牢房里
var delegate : ImagePickerDelegate?
@IBAction func pickImage(sender: AnyObject) {
delegate?.pickImage()
}在你的tableViewController中
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("displayImage", forIndexPath: indexPath) as! ImageTableViewCell
cell.delegate = self
return cell
}
func pickImage() {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
imagePicker.allowsEditing = false
self.presentViewController(imagePicker, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
dismissViewControllerAnimated(true, completion: nil)
var cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0)) as! ImageTableViewCell
cell.displayImageView.image = image
}希望这能有所帮助。
发布于 2015-12-05 14:39:23
只有一个viewController才能呈现另一个viewController。所以使用:
self.view.presentViewController(imagePicker, animated: true, completion: nil)发布于 2019-08-24 00:18:40
只是@truongky关于Swift 5语法更新的帖子的后续文章。
正如他正确地指出的那样,首先要创建一个协议。您可以为您的协议创建一个扩展名为的新文件。然后插入OP识别的代码:
protocol ImagePickerDelegate {
func pickImage()
}然后,在您的TableViewController中:
func pickImage() {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary
imagePicker.allowsEditing = false
self.present(imagePicker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
let cell:ImageCell = tableView.cellForRow(at: IndexPath(row: 0, section: 0)) as! ImageCell
cell.customImage.image = image
}
picker.dismiss(animated: true, completion: nil)
}此外,您还可以修改自定义单元格以响应点击手势识别器,如下所示:
var delegate : ImagePickerDelegate?
@IBOutlet weak var customImage: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
addTapGestureRecognizer(for: customImage)
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
func addTapGestureRecognizer(for view: UIImageView) {
let tap = UITapGestureRecognizer(target: self, action: #selector(pickImage))
tap.numberOfTapsRequired = 1
view.isUserInteractionEnabled = true
view.addGestureRecognizer(tap)
}
@objc func pickImage() {
delegate?.pickImage()
}希望这能有所帮助。
功劳~
https://stackoverflow.com/questions/34101524
复制相似问题