2016-09-12 3 views
0
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    var renderWidth:CGFloat = 8 
    var renderYPosition:CGFloat = 22 
    let cell = tableView.dequeueReusableCellWithIdentifier("idcell", forIndexPath: indexPath) as! UITableViewCell 
    let date = UILabel(frame: CGRectMake(renderWidth, renderYPosition, 110, 20)) 
    let dateText = "asdasdasdsad" 
    date.text = dateText 
    if(cell.selected){ 
     date.textColor = UIColor.whiteColor() 
    } 
    cell.addSubview(date) 
    renderWidth = renderWidth + 110 
} 

表示する行の種類が3つ(ラジオボタン、テキストラベル、テキストビューなど)の場合、これらの行を表示するインデックスパスは完全に動的です。したがって、cellForRowAtIndexPathにいくつかの行を追加して表示する必要があるかどうかを判断します。そして私はそれを行うにはaddsubviewを使用します。しかし、私は、いくつかのポストは、cellForRowAtIndexPathにサブビューを追加すべきではないと言いました。私はそれを得ることができません。それに代わるものは何ですか?それを行う正しい方法は何ですか?UITableViewControllerを使用する正しい方法

+1

独自のIDを持つ3つのプロトタイプセルを作成し、必要なものをデキューします。 – vacawama

+0

しかし、なぜ私はこの機能でサブビューを追加することですべきではありませんか? – henry

+0

セルが再利用されるので、サブビューを追加する場合は、セルが別のタイプである場合にセルが再利用されたときにそれらのサブビューを削除する必要があります。 3つのセルを必要に応じて設定するのは簡単です。 – vacawama

答えて

1

再利用可能なセルは同じである必要があります。そのため、3つの異なるセルモデルを作成してください。cellForRowAtIndexPathでは、どちらからデキューするかをロジックで把握してください(最初にテーブルビューにセルを登録してください)。この方法では、サブビューを追加する必要はなく、必要に応じてセルを設定することができます。これを行うためのよりクリーンな方法です(ビューモデルでセルを設定することも可能です)。

関連する問題