CellForRowatIndexPathおよびNSBundle MainBundleの問題
-
16-10-2019 - |
質問
この問題を解決するアイデアがありますか?
これは 正確で間違った方法 敬意:
これは動作コードです:
- (UITableViewCell *)[...] cellForRowAtIndexPath:(NSIndexPath *)indexPath {
@try {
newsRow = ((NewsRowController *)[tableView dequeueReusableCellWithIdentifier:@"cell"]);
if (newsRow == nil) {
if ( [[Device GetModel] isEqualToString:@"iPad Simulator"] ||
[[Device GetModel] isEqualToString:@"iPad"])
[[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil];
else [[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil];
if ([tableArray count] > 0)
[newsRow setData:[tableArray objectAtIndex:indexPath.row]];
}
}
@catch (NSException * e) {
NSLog(@"a!!!!!");
}
return newsRow;
}
...しかし、私の3Gデバイスではそうです ゆっくり テーブルを上下にスクロールするとき この方法でコードを変更し、viewdidloadにデバイスチェックを挿入して渡す cellForRowAtIndexPath
:
NSArray *cRow;
@property (nonatomic, retain) NSArray *cRow;
[...]
@syntetize cRow;
- (void)viewDidLoad {
[...]
if ( [[Device GetModel] isEqualToString:@"iPad Simulator"]
||
[[Device GetModel] isEqualToString:@"iPad"])
cRow = [[[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil] retain];
else cRow = [[[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil] retain];
[...]
}
- (UITableViewCell *)[...] cellForRowAtIndexPath:(NSIndexPath *)indexPath {
@try {
newsRow = ((NewsRowController *)[tableView dequeueReusableCellWithIdentifier:@"cell"]);
if (newsRow == nil) {
//
// ADDED CODE.
//
newsRow = [cRow objectAtIndex:0];
//
if ([tableArray count] > 0)
[newsRow setData:[tableArray objectAtIndex:indexPath.row]];
}
}
@catch (NSException * e) {
NSLog(@"a!!!!!");
}
return newsRow;
}
今、テーブルは私に列だけを見せてくれます。スクロールすると、行が変更されますが、1つの行のみが表示されます...
どうしたの?
何か助けがありますか?
ありがとう、
a
解決
この場合、DequeuereUsableCellWithIdentifierに電話すると、デキュートできるセルがないため、NILを後退させます。 NILセルを戻すたびにペン先をロードする必要があります。そうしないと、最初のセルの後にテーブルにセルに追加することはありません。
GetModelを呼び出すことが遅くなっている場合、ViewDidLoadでそれを呼び出して、後で使用するために保存することができます。
おそらく、各セルに描画しているビューの量のために、テーブルがスムーズにスクロールしていない可能性があります。あなたの背景が常に固体色である場合は、あなたがセルまたは不透明に追加しているすべてのビューを確認する必要があります。画像またはグラデーションの背景が必要な場合は、セルをすべて1つのビューで描画することを検討する必要があります。 Appleにはここでこれを行う方法の良い例があります: TableViewSuite. 。具体的には、TimeZoneViewファイルをチェックアウトします。
所属していません StackOverflow