2017-01-14 59 views
0

我有共同的List-Detail應用程序。用於顯示項目索引的TableView和用於顯示具有更多細節的單個項目的詳細ViewController。在列表和細節中重用相同的視圖ViewController

List: 

+-----------------+ 
|     | 
|  IMAGE 1  | 
|     | 
+-----------------+ 
|button1 button2 | 
|=================| 
|     | 
|  IMAGE 2  | 
|     | 
+-----------------+ 
|button1 button2 | 
|=================| 
|  .  | 
|  .  | 
|  .  | 


Detail: 
+-----------------+ 
|     | 
|  IMAGE 1  | 
|     | 
+-----------------+ 
| some text  | 
+-----------------+ 
|button1 button2 | <= same actions/handlers as in list 
|=================| 

兩者都有一個按鈕欄與多個按鈕(如保存等)。如何重用這個按鈕欄的邏輯?

回答

1

您可能想要添加這些函數(保存,等等)到包含數據的類(圖像,文本等)。然後你可以從任何你想要的地方調用這個函數,它也會這樣做。例如:

class Post { 
    var image: UIImage? 
    var text: String? 

    func save() { 
     // Put your code here to save the 'Post' 
    } 

    func like() { 
     // Put your code here to like the 'Post' 
    } 
} 

爲您定製UIViewUITableViewCell您可以通過使用一個和extension做類似的事情。例如:

protocol UpdateState { 
    var myImageView: UIImageView? { get } 
    var myTextLabel: UILabel? { get } 
    func save() 
    func like() 
} 

extension UpdateState { 

    func save() { 
     // Put your code here to save the 'Post' 
     myTextLabel?.text = "New text after save" 
     myImageView?.image = UIImage(named: "SavedImage") 
    } 

    func like() { 
     // Put your code here to like the 'Post' 
     myTextLabel?.text = "New text after like" 
     myImageView?.image = UIImage(named: "NewImage") 
    } 
} 

class Cell: UITableViewCell, UpdateState { 
    @IBOutlet weak var myImageView: UIImageView? 

    // This is here to conform to the UpdateState protocol 
    var myTextLabel: UILabel? = nil 
} 

class View: UIView, UpdateState { 
    @IBOutlet weak var myImageView: UIImageView? 
    @IBOutlet weak var myTextLabel: UILabel? 
} 
+0

這就是我實際做的,但有更多相同的代碼,如動畫或UI狀態更改。 – dkoch

+0

我已經更新了我的答案,以顯示如何在UIView和UITableViewCell之間共享代碼。希望這對你的情況有意義。 –

+0

看起來像視圖充當控制器。這是我想要避免的...... – dkoch

0

讓你在特定的索引,你想顯示按鈕的具體數目,其中設置的數據源,如果確認一個單獨的按鈕欄組件,然後做一個字典作爲數據源,關鍵意志是索引,值將是另一個存儲按鈕標題的字典。你可以讀取數據源並以編程方式在單獨的按鈕欄組件中創建按鈕。

相關問題