0

iPhoneとiPad用のアプリを作成しようとしています。このために、アプリの読み込み時に受信されるjsonを期待してセルを作成するテーブルビューを作成しました。メソッドの内部

tableView:cellForRowAtIndexPath:

iPhone に使用するセルを開始し、json から特定の値を設定します。私が使用するセルは、新しいオブジェクトと NIB ファイルで作成したカスタム セルです。コードは次のようになります。

static NSString *CellIdentifier = @"tvChannelIdentifier";

tvChannelCell *cell = (tvChannelCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"tvChannelCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}
....

アプリを iPad でも動作させようとしたので、新しいオブジェクトと NIB ファイルを使用して、新しいカスタム セルを作成しました。変数の名前は customIPhoneCell と同じなので、コード全体を変更する必要はありません。tableView:cellForRowAtIndexPath: 内にスイッチを挿入したところ、正しいセルが表示されますが、コードからはアクセスできません。

static NSString *CellIdentifier = @"tvChannelCell";
static NSString *IPadCellIdentifier = @"tvChannelIPadCell";


//determination which device ---> choose cell
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
    tvChannelCell *cell = (tvChannelCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

}else{

    tvChannelIPadCell = (tvChannelIPadCell *) [tableView dequeueReusableCellWithIdentifier:IPadCellIdentifier];
}

クラスの先頭でセル オブジェクトを定義しようとしましたが、同じ変数名を使用できません。また、iPadのNIBファイルを選択して表示されるかどうかを確認しようとしましたが、何も起こりません。そして一番上にUITableviewcellを設定しようとしたのですが、

UITableViewCell *cell

cellForRowAtIndexPath のスイッチ内に特定のセル タイプを設定しますが、変数にアクセスできません。

だから私の質問は、テーブルビューメソッド内でこの切り替えを行うことは可能ですか、それとも各セルタイプが独自の変数名を持つデバイスごとにいくつかの部分にコーディングする必要がありますか?

4

3 に答える 3

2

私がやること:

2 つの xibs を持つ UITableViewCell サブクラスを 1 つだけ作成します。1 つは iPad 用、もう 1 つは iPhone 用です。

tvChannelCell *cell = (tvChannelCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
NSArray *nib;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){

     nib = [[NSBundle mainBundle] loadNibNamed:@"tvChannelCell_iPhone" owner:self options:nil];

}else{

    nib = [[NSBundle mainBundle] loadNibNamed:@"tvChannelCell_iPad" owner:self options:nil];
}

    cell = [nib objectAtIndex:0];
}
于 2013-04-19T13:45:27.360 に答える