0

forループを使用することを考えていますが、これを実現する方法が組み込まれているのではないかと考えていました。基本的に、1つのビューには、オブジェクトのリストを含むテーブルビューがあり、ユーザーはオブジェクトを「チェック」して、必要な数だけクリックできます。次の文字列に移動したら、選択した名前を別のテーブルビューに入力します。

これが私の選択方法です:

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


    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

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

    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

テーブルビューが取得される配列の各値を調べ、正しいアクセサリタイプの値のみを新しい配列に追加するforループを含むメソッドを作成することを考えています。何か案は?

4

1 に答える 1

3

NSMutableIndexSetを使用して選択をバックアップする方がMVCになります。それ以外の場合、ユーザーがセルを選択した後、セルをフレームからスクロールアウトしてキューから取り出された場合はどうなりますか?

インターフェイスでプロパティを宣言します。

@property (strong) NSMutableIndexSet* selected;

viewDidLoadまたは同様の場所でインスタンス化します。次に、デリゲートメソッドで変更します。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

    if (![self.selected containsIndex:indexPath.row])
    {
        [self.selected addIndex:indexPath.row];
    }
    else
    {
        [self.selected removeIndex:indexPath.row];
    }

    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

cellForRowAtIndexPath:メソッドで、チェックマークを表示するかどうかを決定します。

cell.accessoryType = [self.selected containsIndex:indexPath.row] ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;

選択したオブジェクトが必要な場合は、

return [self.myObjects objectsAtIndexes:self.selected];

注:私が最初にこれを投稿したとき、それは実際にはテストされていませんでした。それ以来、いくつかの変更を加えました。たとえば、cellForRowAtIndexPath:メソッドONLYでaccessoryTypeを設定するとします。

于 2012-04-12T01:15:21.413 に答える