1

テーブルビューを作成し、データを表示しました。テーブルビューでデータをクリックすると、アクセサリマークが付けられます(UITableViewCellAccessoryCheckmark、Like、Check Markを使用)。ここで、インデックス位置の状態を保持したいと思います。別のクラスに行ってからテーブルビューに戻ると、前の状態(アクセサリマーク)が表示されるためです。では、状態を保持するにはどうすればよいですか。つまり、インデックスパス値を保存または保存できます(AppDelegateメソッドを使用せずに)。これを実現するにはどうすればよいですか?

ここに私のサンプルコードは、

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

 if (newRow != oldRow)
{
    UITableViewCell *newCell = [tableView cellForRowAtIndexPath:
                                indexPath];
    newCell.accessoryType = UITableViewCellAccessoryCheckmark;

    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:
                                checkedData];
    oldCell.accessoryType = UITableViewCellAccessoryNone;

    checkedData = indexPath;

}
if (newRow == oldRow) {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    if (cell.accessoryType == UITableViewCellAccessoryNone) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

    } else {

        // cell.accessoryType = UITableViewCellAccessoryNone;
    }
    checkedData = indexPath;
}
 }

テーブルビュークラスに戻るときは、前の状態を保持する必要があります。では、どうすればそれにアクセスできますか?

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

    if(checkedData == indexPath) // Doesn't works
      {

    cell.accessoryType = UITableViewCellAccessoryCheckmark;
     }

私を助けてください。

ありがとう

4

1 に答える 1

1

スコープの最後に到達すると、変数は使用できなくなります(変数がゼロであるかリリースされているかはわかりませんが、使用できないことはわかっています)。

あなたがしたいのは、A)その値を永続ストレージに保存するか、 B)永続変数を作成することです。

A)オブジェクトをストレージに設定します(この場合、NSUserDefaultsは非常に簡単なので、次のようになります。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
prefs = [setObject:checkedData forKey:@"checkedData"];

次に、オブジェクトを希望どおりにチェックするには、次のようにします。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
if([[prefs objectForKey:@"checkedData"] compare: indexPath]== NSOrderedSame){
cell.AccessoryType = UITableViewCellAccessoryCheckMark;
}

B)オブジェクトを永続変数として保存します。

あなたの.hで:

@interface ... : ...{

}

@property(nonatomic, retain) NSIndexPath *checkedData;

@end

.mで:

@implementation 
@synthesize checkedData;
@end

ここで、この変数を設定するには:

self.checkedData = indexPath;

確認するには:

if([self.checkedData compare:indexPath] == NSOrderedSame){
cell.accessoryType = UITableViewCellAccessoryTypeCheckMark;
}

それほど大きな違いはありません。何が欲しいかはあなた次第です。ただし、NSUserDefaultsを使用する場合は、データが起動後も保持されることに注意してください。それを望まないが、それを使用したい場合は、アプリを閉じるときにオブジェクトを空にする必要があります。[prefs removeObjectForKey:@"checkedData"];

ハッピーコーディング、

ゼーン

于 2011-01-27T11:49:39.333 に答える