カスタムセルを作ってみよう。(xibファイル作成版) | 渋谷で働くUnity野郎

渋谷で働くUnity野郎

備忘録として有効活用していきます。

カスタムセルを作る方法としては3種類あります。

1.プログラム中でひたすら"addSubview"でペタペタ貼っていく方法

2.xibファイルを用いてカスタムセルを作成する方法

3.Storyboardを用いてカスタムセルを作成する方法


今回は2番のxibファイルを用いてカスタムセルを作っていきたいと思います。


まず、New File...から新しい"Objective-C Class"ファイルを作ります。
Iichinのブログ

ただし"Subclass of"はUITableViewCellに指定しましょう。
Iichinのブログ
(ここではクラス名をtestCellとしていますが、以下ではtestとした場合の記述となります。)



作成したUITableViewCellクラスのヘッダファイル(.h)に次のように記述します。


@interface クラス名 : UITableViewCell{
@private
//これはタブに貼付けるためのラベル
IBOutlet UILabel* _nameLabel;
}

@property (nonatomic, retain) UILabel* nameLabel



次に(.m)ファイルに次のように記述します。


@implementation クラス名{
@synthesize nameLabel = _nameLabel;

-(void)dealloc{
_nameLabel = nil;
}

@end


ソースはたったこれだけです。
簡単でしょ?

次にnibファイルを作成します。

-------------------------------------------------
コラム:「nibファイル」とはGUIデザインのファイルを作成するための専用ツールです。
え?それxibじゃないの?と思いますよね?
勿論プロジェクトにあった「◯◯.xib」というファイルが、nibファイルを指します。
つまりxibファイル = nibファイルですが、過去にnibという拡張子になっていたため、今でもnibファイルと呼ばれる名残があります。
-------------------------------------------------


User InterfaceのViewを選択し作成します。
$Iichinのブログ

Device Familyは勿論iphoneです。
名前は分かりやすくするために、UITableViewCellクラスで名付けた名前(test)と同じにしました。

ここからは、今作成したnibファイルの編集です。



まずは、初めからあるUIViewを削除しましょう。

これのことです。Deleteボタンでさくっと削除しましょう。
$Iichinのブログ


次に、“Object Library”にあるTable View Cellを配置しましょう。
$Iichinのブログ

それでは、セルのレイアウトを作成しましょう。
私はボタンとラベルを次のように置きました。
$Iichinのブログ



では、レイアウトしたnibを、紐付けていきましょう。
$Iichinのブログ
作成したTableViewCellのnibをUITableViewCellクラスに紐付けます。

上図のようにTableViewCellを選択した状態で、次のようにIdentity InspectorのClassを、作成したnibファイルに指定します。
$Iichinのブログ



そして、識別するためのID、すなわちIdentifierをCellにしておきましょう。
$Iichinのブログ


そしてFile's OwnerをUIViewControllerに変更しておきましょう。
$Iichinのブログ


$Iichinのブログ


するとFile's OwnerにViewの欄が現れますので、TableViewCellに接続します。
$Iichinのブログ


そして最後に用意したIBOutletのラベルと紐付けをしましょう。
$Iichinのブログ

ここまでがnibファイルを用いたレイアウトです。



では、最後にTableView側での処理を行いましょう。

以下、TableViewでの処理



.mファイルで。

.mファイルの冒頭で
#import "test.h" //自分で作成したUITableViewCellクラスをインポートすること!

//セクション数は適当に!
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}

//同様にセルの数も適当に設定!
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 2;
}

//セルを記述します。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//この【Cell】という文字列が先ほどIdentifierで設定したIDです。
//このIDによってどのカスタムセルか区別します。
static NSString *CellIdentifier = @"Cell";

//ここの 【test】 *cell の【】の部分は自分で作成したUITableViewCellクラスの名前です。
test *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if( cell == nil){
UIViewController *controller;

//initWithNibNameは作成したNibファイル名です。今はUITableViewCellクラスと同じにしたので、testになります。
controller = [[UIViewController alloc] initWithNibName:@"test" bundle:nil];

cell = (test*)controller.view;
}

cell.nameLabel.text = @"TEST";

return cell;
}

最後に、セルの高さの自動調整をしておきましょう。
- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString *CellIdentifier = @"Cell";

test *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil){
UIViewController *controller;
controller = [[UIViewController alloc] initWithNibName:@"test" bundle:nil];
cell = (test *)controller.view;
}
return cell.bounds.size.height;
}

以上のコードを書いて実行すると次のような実行画面が出ます。
$Iichinのブログ


以上でカスタムセルのNibファイルを使った方法の紹介を終わります。