2017-01-11 2 views
0

背景 私は、リアルタイムのデータストリームを受け取ることができるIOSアプリケーションを持っています。ライブストリームからこのデータを保存/キャプチャするカスタム値オブジェクトを実装しました。私は今私のカスタムデータオブジェクトをUIにバインドする必要があります(主にテーブルビューとそれらのカスタムオブジェクト値を呼び出すカスタムセルを使用します)。私はスウィフト3に債券、ReactiveKit、または他のフレームワークを使用して、私のUIにカスタムオブジェクトの値の配列をバインドするにはどうすればよいSwift 3、ReativeKit、およびBondを使用してカスタムオブジェクトの配列をバインドする方法

質問 ?あなたは既にのUITableViewを含む多くのUIKit要素用に設定されているデリゲートパターンを、使用

サンプルコード

public class Device { 
    var name: String 
    var status: String 
} 
public class DeviceController { 
    var devices = Array<Device>() 
    // more code to init/populate array of custom Device classes 
} 
public class CustomViewController: ... { 
    var deviceController = DeviceController() 
    var tableView: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // more code to register custom cell 
} 
public class CustomCell:UITableviewCell { 
    @IBOutlet weak var deviceName: UILabel! 
    @IBOutlet weak var deviceStatus: UILabel! 
} 

答えて

0

AのUITableViewは、あなたのUITableViewのために特にそう

var dataSource: UITableViewDataSource? 
var delegate: UITableViewDelegate? 

2つのプロトコルに準拠する任意のオブジェクトにすることができます2つのプロパティを、持っている、あなたは、データソースとデリゲートとして機能するオブジェクトを割り当てます。多くの場合、必ずしもそうではありませんが、データソースとデリゲートの両方を含むViewControllerを作成します。

override func viewDidLoad() { 
    tableView.dataSource = self 
    tableView.delegate = self 
    ... 
} 

ただし、まずViewControllerをそれらのプロトコルに準拠させる必要があります。

コマンド2つの適合宣言をクリックすると、ビューコントローラに追加して適合させる必要があるメソッドが表示されます。彼らは彼らが何をしているかをはっきりと分かっているし、おそらくそこからそれを理解することができるだろう。

しかし、具体的には、numberOfRows、numberOfSections、およびこのメソッドを追加する必要があります。これは、あなたが求めていると思います。そこから

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    // dequeue a cell for reuse 
    // type cast the cell to your UITableViewCell subclass 
    // set the device name and device status labels like so.. 

    cell.deviceName = deviceController.devices[indexPath.row].name 
    cell.deviceStatus = deviceController.devices[indexPath.row].status 
    return cell 
} 

サブビューがレイアウトされているとき、のtableViewは、自動的にデータを要求します。データがすべて瞬時に利用可能なわけではない場合は、tableView.reloadData()が呼び出されます。

+0

私はすでに、あなたが提案したコードに非常によく似た、コード化/実装された代理人を持っています。このテクニックは、REST APIを呼び出してカスタムオブジェクトの配列(表のセルに割り当てられる)を移入するとうまく機能します。問題は、私は今すぐ私のアプリにストリームを送信するリアルタイムフィードを持っていますが、私は配列内のそれらのカスタムオブジェクトを更新しますが、私のテーブルビューのセルは、カスタムオブジェクトの値がいつ変化しているか、 ReactiveKit/Bond /その他のフレームワークを見て、データ値をUIコンポーネントにバインドする – Cameron

関連する問題