UITableView で、row には UIView と UILabel をいくつか表示。UIView は UIBezierPath の絵と、UILabel で構成されている(文字で書くとすごい分かりにくい)。UIView は各 record に応じて色と UILabel の text を変えたいがどうするのか。

まず、各 row の取り出し方。次の delegate method で各行の表示内容を指定できる。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

UIView を別クラスで指定した方がわかりやすい。これは Storyboard で Prototype Cell のところに配置した UIView に別のクラス名を書いてやると指定できる。上記の delegate method で、UIView を取り出すには、前準備として、Storyboard で tag を指定しておく。その上で、次のような形で UIView の class を取り出せる。

 static NSString* CellIdentifier = @"tableCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    

    STBadge* view = [cell viewWithTag:1];// badge で定義

STBadge は UIView の sub class として指定している class。この UIView は UIBezierPath と UILabel から成るのだけれど、UILabel の text を行ごとに変えるには、前準備として、STBadge class の property を指定しておく必要がある。

@property (strong, nonatomic) NSString* labelText;

また、STBadge の実装ファイル(m)では、この property を指定しておく。

label.text = _labelText;

これで準備が整っていて、前述の delegate method では、

view.labelText = @"hoge";

のようにすると、行ごとに text を指定できる。

Objective-C の場合、というか、Object 指向言語では class 間の情報のやり取りに結構悩まされることが多いなぁ。まぁ、慣れなのかもしれないけど。