iPhone UITableViewController hanya memindahkan baris tertentu dalam tabel

Saya telah menerapkan standar UITableViewController. Saya hanya membuat beberapa baris di tabel agar dapat dipindahkan, yaitu. canMoveRowAtIndexPath mengembalikan nilai true hanya untuk beberapa indexPaths (untuk baris di bagian pertama tabel). Saya ingin mengizinkan pertukaran hanya pada baris-baris yang dapat dipindahkan, yaitu. yang canMoveRowAtIndexPath mengembalikan nilai true.

Misalnya. meja saya terlihat seperti ini:

Row 1
Row 2
Row 3
Row 4
Row 5

Baris 1, 2, 3 dapat dipindahkan. Jadi saya ingin menerapkan perilaku berikut: baris 1 hanya dapat ditukar dengan baris 2 atau 3. Demikian pula, baris 2 hanya dapat ditukar dengan baris 1 dan 3. Ini adalah salah satu kemungkinan tata letak:

Row 3
Row 1
Row 2
Row 4
Row 5

Namun, saya tidak ingin hal ini terjadi:

Row 3
Row 5
Row 2
Row 4
Row 1

Bagaimana cara mencapainya?


person Maggie    schedule 23.10.2010    source sumber


Jawaban (2)


Perlu diingat bahwa ini sebenarnya hanya memindahkan satu baris, bukan bertukar.

Yang Anda inginkan adalah menerapkan tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath

Lihat Cara membatasi penyusunan ulang baris UITableView ke suatu bagian

person Eiko    schedule 23.10.2010
comment
Terima kasih banyak! targetIndexPathForMoveFromRowAtIndexPath memecahkan masalah saya. - person Maggie; 23.10.2010

Anda dapat mengontrol pergerakan di dalam bagian dan antar bagian.

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath

{

// Do not allow any movement between section
if ( sourceIndexPath.section != proposedDestinationIndexPath.section)
    return sourceIndexPath;
// You can even control the movement of specific row within a section. e.g last row in a     Section

// Check if we have selected the last row in section
if (   sourceIndexPath.row < sourceIndexPath.length) {
    return proposedDestinationIndexPath;
} else {
    return sourceIndexPath;
}

// Anda dapat menggunakan pendekatan atau logika ini untuk memeriksa indeks baris di bagian dan mengembalikan sourceIndexPath atau targetIndexPath

}

person Andy    schedule 27.07.2014