2017-02-21 21 views
-1

我想只传递一个结构的图像部分(也包含两个textFields,另一个imageView我想不通过)。如何传递一个结构的一部分?

这里是tableViewController

import UIKit 

class SentMemesTableViewController: UITableViewController { 

    var _tableView: UITableView! 
    var memeData: [Meme] = [] 


    //calling memes from array in Delegate 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    var memes: [Meme] { 
     return appDelegate.memes 
    } 

    override func viewWillAppear(_ animated: Bool) { 
     tableView.reloadData() 
    } 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     tableView.isScrollEnabled = true 

    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "MemeDetailViewController" , 
     let nextScene = segue.destination as? MemeDetailViewController , 
      let indexPath = tableView.indexPathForSelectedRow { 
      let selectedMeme = memes[indexPath.row].memedImage 
      nextScene.sentMemeView.image = Meme.memedImage 
     } 

    } 


    // MARK: - Table view data source 

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

      //navigationController!.pushViewController(MemeDetailViewController, animated: true) 

    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // #warning Incomplete implementation, return the number of rows 
     return memes.count 
    } 

    // Here it is! ----- 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let tableViewCell = tableView.dequeueReusableCell(withIdentifier: "sentMemesTableView") as! MemeTableViewCell 
     let meme = memes[indexPath.row] 

     tableViewCell.tableViewImage.image = meme.memedImage 
     tableViewCell.tableViewLabel.text = "\(meme.topText)...\(meme.bottomText)" 



     return tableViewCell 
    } 

    // Override to support conditional editing of the table view. 
    override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 
     // Return false if you do not want the specified item to be editable. 
     return true 
    } 

    // Override to support conditional rearranging of the table view. 
    override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { 
     // Return false if you do not want the item to be re-orderable. 
     return false 

    } 

    func deleteMemesInTableViewCell(_ index: Int) { 
     let appDelegate = UIApplication.shared.delegate as! AppDelegate 
     appDelegate.memes.remove(at: index) 
    } 

    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
     if (editingStyle == UITableViewCellEditingStyle.delete) { 
      tableView.beginUpdates() 
      deleteMemesInTableViewCell(indexPath.row) 
      tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.left) 
      tableView.endUpdates() 
     } 
    } 
} 

这里是梅梅和SentMemeView结构。

import Foundation 
import UIKit 

struct Meme { 
    let topText: String 
    let bottomText: String 
    let originalImage: UIImage 
    let memedImage: UIImage 
} 


struct SentMemeImageView { 
    var memedImageDetailVC: UIImageView 
} 

我找不到方法来成功调用它。

这里是MemeDetailViewController。我只需要为sentMemeView显示SentMemeImageView。

class MemeDetailViewController: UIViewController { 
    var meme = SentMemeImageView?.self 

    @IBOutlet weak var sentMemesBtn: UIBarButtonItem! 
    @IBOutlet weak var editBtn: UIBarButtonItem! 
    @IBOutlet weak var sentMemeView: UIImageView! 

    func displayMeme(_ meme: SentMemeImageView) { 
    } 

    @IBAction func launchMemeEditorViewController(_ sender: Any) { 
     _ = navigationController?.popViewController(animated: true) 
    } 

    //unwinding to the view before (the collectionView, or the tableView) 

    @IBAction func unwindVC(for unwindSegue: UIStoryboardSegue, towardsViewController subsequentVC: UIViewController) { 
     self.dismiss(animated: true, completion: nil) 
    } 
} 
+0

请不要公开你的代码的图片。请将实际的代码复制并粘贴到您的问题中。 – rmaddy

+0

进行编辑并添加了代码。 –

回答

0

首先,伤心地说,你的代码是相当搞砸: 你有三种不同的数据源,一些被忽略,一些你,但不是以一致的方式工作:从应用程序委托

  • 数据(数据的删除
  • memeData属性(显示数据的
  • memes财产(忽略

你真的应该专注于数据存储的位置以及如何访问它。

其次,你不会发送意见从一个视图控制器到另一个,但数据。所以宁可使用UIImage而不是UIImageView。所以你会将SentMemeImage交给细节控制器。

我试着清理一下代码,但只是为了回答你明确的问题。请重构它!

struct Meme { 
    let topText: String 
    let bottomText: String 
    let originalImage: UIImage 
    let memedImage: UIImage 
} 

struct SentMemeImage { 
    var memedImage: UIImage 
} 


class SentMemesTableViewController: UITableViewController { 
    var memeData: [Meme] = [] 

    // ----8<---- snipp ----8<---- 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "MemeDetailViewController" , 
      let nextScene = segue.destination as? MemeDetailViewController , 
      let indexPath = tableView.indexPathForSelectedRow { 
      let selectedMeme = memeData[indexPath.row] 
      let sentMemeImage = SentMemeImage(memedImage: selectedMeme.memedImage) 
      nextScene.meme = sentMemeImage 
     } 
    } 

    // ----8<---- snipp ----8<---- 
} 

class MemeDetailViewController: UIViewController { 
    var meme:SentMemeImage? 

    @IBOutlet weak var sentMemesBtn: UIBarButtonItem! 
    @IBOutlet weak var editBtn: UIBarButtonItem! 
    @IBOutlet weak var sentMemeView: UIImageView! 

    func displayMeme() { 
     self.sentMemeView.image = self.meme?.memedImage 
    } 
} 
相关问题