2011-07-08 10 views
2

私は大学のプロジェクトとして位置認識アプリケーションを開発しています。開発する機能の1つは、ユーザーに最も近い5つの重要なポイントを示すことです。セルスタイルがUITableViewCellStyleSubtitleであるテーブルビューを使用しています。私はいくつかの問題を抱えています。なぜなら、セルのタイトルとサブタイトルを超えて、私はPOIに到達するためにユーザーが従うべき方向を示すためにイメージ(矢印)を使用しているからです。このイメージは、デバイスの見出し/位置が変わるとすぐに回転するはずです。問題は、テーブルビューの最後の行だけが機能し、主な問題は、各POIがデバイスの位置ではなく異なる位置を持つことができるため、5つの異なるセルを使用する方法がわからないということです。独立して回転する。 問題をよりよく理解できるように画像を報告します。ここで異なるセルの "動作"を持つUITableView

TableView

私はテーブルビューのセルに使用されるコードを、次のとおりです。

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

    static NSString *tableIdentifier = @"tableIdentifier"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableIdentifier]; 

    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:tableIdentifier] autorelease]; 
    } 

    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    cell.textLabel.backgroundColor = [UIColor clearColor]; 
    cell.detailTextLabel.backgroundColor = [UIColor clearColor]; 

    NSUInteger row = [indexPath row]; 


    cell.detailTextLabel.text = [NSString stringWithFormat:@"Distance: %.3f Km",[...]; 

    UIImage *cellImage = [UIImage imageNamed:@"arrow.png"]; 
    cell.imageView.image = cellImage; 
    self.cellImageView = cell.imageView; 

    return cell; 
} 

その直角で、各矢印を提供するために、5種類の細胞を使用する方法の任意のアイデアを!

おかげで行うことにより

+0

UIImageViewの見出しをどのように追加したか教えてください。ここでコードを共有することができます。私はあなたの答えをすぐに伝えます。 – AppAspect

+0

どのように細胞を更新しますか? – akashivskyy

+0

テーブルビューのビューコントローラでは、UIImageViewのプロパティを定義しました。このプロパティは、デバイスが見出しを変更するとすぐに更新されます。上のメソッドでは、コンセントはself.cellImageView = cell.imageViewによって初期化されます。デバイスが見出しを変更すると、デリゲートはCGAffineTransformMakeRotation(角度)を使用してimageViewを更新します。 – ubiAle

答えて

2

self.cellImageView = cell.imageView

あなたは自分自身に最後のセルの参照のみを与えています。セルを設定するたびに、cellImageView変数がそのセルのイメージビューを指すように更新され、以前のセルのイメージビューへの参照が失われます。

したがって、問題を解決する1つの方法は、セルイメージビューを配列に蓄積することです。適切な場所に画像のビューを一致させておいてください。テーブルビューが表示されると、セルが再利用される可能性があります。しかし、テーブルビューはそれらのセルを所有していますが、キャッシング目的(したがって再利用識別子)を求めています。

もっと良い方法は、テーブルビューと協力して、変更が必要なときに通知することです。あなたのivarを忘れて、セル構成中に正しい見出しを設定してください。セルの見出しを変更する必要がありますか?そのセルをリロードするようにtableviewに指示します。すべてのセルの見出しを変更する必要がありますか? [[self tableView] reloadData]に電話するだけです。

あなたが目立つUIの低下を伴う問題に遭遇した場合にのみ、もっと賢明なことを心配する必要があります。

+0

reloadDataは、メソッドtableView:(UITableView *)を実行しますか?tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath?このメソッド内で変換の角度を計算する関数を呼び出すことができますので、reloadDataが呼び出されるたびに関数が呼び出され、画像が更新されます。あなたはこのように働くと思いますか? – ubiAle

+0

はい、そのメソッドを呼び出します。したがって、位置/見出しが変化したときに 'reloadData'を呼び出すだけで、そのインデックスパスの正しい方向を確認し、適切にセルをリグアップすることができます。 –

+0

ああ、明日はおそらくそれを試してみよう...私はあなたの更新を続けます!ありがとう!!!! – ubiAle

関連する問題