2017-01-14 7 views
0

私は共通のリスト・ディテール・アプリケーションを持っています。 Itemsのインデックスを表示するための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

データ(画像、テキストなど)を含むクラスにこれらの関数を追加したいと思うかもしれません。あなたはどこからでも関数を呼び出すことができ、同じことをするでしょう。たとえば、次のカスタムUIViewUITableViewCellため

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' 
    } 
} 

あなたはと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

は、あなたが特定のインデックスであなたがボタンの特定の数を表示することが確実な場合には、データソース、キーの意志として、辞書を作る、あなたがデータソースを設定する別のボタンバーコンポーネントを作成しますインデックスはvalueで、valueはボタンのタイトルを格納する別の辞書になります。そして、あなたはデータソースを読み込み、別々のボタンバーコンポーネントでボタンをプログラムで作成することができます

関連する問題