2016-05-03 10 views
-2

複数のtextLabelsを含む表のセルを生成しようとしていますが、textLabelsを定義することすらできません。SwiftのUITableViewCellの複数のtextLabels

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = UITableViewCell() 

    cell.label1.text = "Hello" //error..value of type 'UITableViewCell' has no member 'label1' 
    cell.label2.text = "World" //error.. 

    return cell 
} 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 10 
} 

UITableViewCellでtextLabelsを定義する方法と、それらの間に垂直スペースを配置する方法はありますか? ありがとうございます。

+0

ラベルを決して定義していないからです。それらをカスタムセルにプロパティとして追加し、代わりにそのカスタムセルをインスタンス化し、AutoLayoutまたはコードを使用してそれらを配置する必要があります。 – EmilioPelaez

+0

@EmilioPelaezあなたの答えをありがとう。私は 'var label1:UILabel'の前に定義しましたが、 'cell.label1.text'のように使うことができないので使用できませんでした。 – user6283450

+0

セル内のラベルをランダムに宣言することはできません。この[Youtube video](https://www.youtube.com/watch?v=adP2dG_C1XU)を見て、カスタムの「UITableViewCell」を作成してください。 – penatheboss

答えて

1

textLabelは、テーブルセルスタイルが「基本」のようなデフォルトタイプのいずれかに設定されている場合にのみ有効なプロパティです。独自のラベルを作成するようなカスタムを行う場合は、セルタイプとして「カスタム」を指定する必要があります。

Setting the cell style to "Custom"

次に、あなたのUILabel秒をレイアウトし、ちょうどあなたがInterface Builderで何か他のものの場合と同様に自動レイアウトの制約を使用することができます。

今、カスタムセルを使用しているので、ラベルにアクセスできるようにセルのサブクラスをUITableViewCellに定義する必要があります。

は、単純にこのようなUITableViewCellの新しいココアタッチサブクラスを作成します。

class MyCell: UITableViewCell { 

    @IBOutlet weak var label1: UILabel! 

    @IBOutlet weak var label2: UILabel! 

} 

これらのラベルのプロパティだけで、おそらくコントロール・ドラッグ我々のコードにInterface Builderでのラベルからによって作成されたIBOutletsしていることに注意してください他のUIコンセントと同じように

実際に、IBからこのクラスにドラッグできるようにするためには、IBのプロトタイプセルが実際にこのクラスであることを指定する必要があります。これを行うには、インスペクタでカスタムサブクラスを指定するだけです。

Specifying our custom subclass.

これは、セルのカスタムサブクラスではなく、テーブルビューであることに注意してください。

残っている唯一のことは、私たちのカスタムセルがIBに識別子を持っていることを確認することです。属性インスペクタの「スタイル」の直下のフィールドに、セルに「cellID」などの識別子を付けます。今

、のようなものにあなたのコードを変更し、コントローラからこれを参照する:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = self.tableView.dequeueReusableCellWithIdentifier("cellID", forIndexPath: indexPath) as! MyCell 

    cell.label1.text = "Hello" 
    cell.label2.text = "World" 

    return cell 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 10 
} 

我々はUITableViewCell()代わりdequeueReusableCellWithIdentifierで細胞を作成すべきではないことに注意してください。これにより、テーブルビューで自動的にセルを効率的に再利用することができます。メソッドのパラメータに正しい識別子が指定されていれば、タイプがMyCellであることが確かになるので、強制的にキャストすることができます。

関連する問題