2017-02-21 37 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 
    } 
} 
相關問題