2009-08-04 12 views
1

これは簡単なことです。私は客観的なC(上司が外注しようとしていた仕事を拾った)に非常に新しく、得られるすべての助けを使うことができます。ここで正しい方向に向けるだけです。基本的に私が設定したいのはこれです:選択時にUITableViewの行をリストの先頭に移動する

私は、必要な数の行に展開される電話番号のリストを持っています。私は何の問題もありませんし、リストはうまくいきますが、リストの最近選択されたすべてのアイテムが一番簡単にアクセスできるようにしたいと思います。だから、ユーザーが "didSelectRowAtIndexPath"と答えるたびに、行を一番上に移動したいと思います。

これは非常に簡単ですが...私は解決策をまだ見つけていません。急がずに。私はちょうど私自身で物事を把握しようとしています。前もって感謝します!

答えて

3

要素の順序は、データソース(コード)の責任であり、テーブルビューではありません。物事を並べ替える場合は、-cellForRowAtIndexPath:を駆動するために使用するデータ構造を並べ替える必要があります。あなたがアニメーションをしたいのであれば、まだ良いアニメーションがあるとは思わない。おそらく(簡単に)できることは、削除と挿入を実行することです。アニメーションの方法の詳細については、Batch Insertion and Deletion of Rows and Sectionsを参照してください。私は数ヶ月前に、OS2.xのこれらのアニメーションの一般的なバグと脆弱性についてUITableViewの開発者に尋ねました。彼らはOS3で多くの作業が改善されたことを私に保証しました。だからうまくいけば、ドキュメントに従うことができ、それはもはやクラッシュしないはずです。

0

のUITableViewは、私はあなたが実際にかかわらず、コードを記述する必要が信じている

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath

というメソッドを持って、私は(私も初心者です)私はテーブルで働いたことがないのでわからないんだけど。

2

テーブル内のある場所から別の場所に行を削除する機能はありません。これは、行を削除し、新しい場所で後ろにそれを追加することでエミュレートすることができます。

// Remove the row from your datasource here 
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:sourcePath] withRowAnimation:UITableViewRowAnimationLeft]; 
// Add the row back into the datasource here 
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:destPath] withRowAnimation:UITableViewRowAnimationLeft]; 

0

は(作業コードはリスト)これを試してみてください、あなたのデータソースを更新するために、適切なコマンドを使用して、コメントを置き換えます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

if(indexPath.row == 0) return; 

NSString * selectedNum = [numbers objectAtIndex:indexPath.row]; // NSMutableArray* numbers = dataStore 
[selectedNum retain]; 

[numbers removeObjectAtIndex:indexPath.row]; 
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
      withRowAnimation:UITableViewRowAnimationLeft]; 
[numbers insertObject:selectedNum atIndex:0]; 
[tableView insertRowsAtIndexPaths:[NSArray 
      arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] 
      withRowAnimation:UITableViewRowAnimationLeft]; 

[selectedNum release]; 

}

+0

こんにちは@Tomas、あなたのコードは動作しますが、我々は明確なアプリのようなアニメーション効果を持つことができます – Ranjit