Tabela Pogled Programski vodnik za prevod uradnih dokumentov iOS

Table View Programming Guide



Pogled tabele ima tako način urejanja kot običajni (izbirni) način. Ko pogled tabele preide v način urejanja, prikaže kontrolnike za urejanje in preurejanje, povezane z njegovimi vrsticami. Kontrolnik za preurejanje omogoča uporabniku, da premakne vrstico na drugo mesto v tabeli. Kot je prikazano na sliki 8-1, se kontrolnik za preurejanje prikaže na desni strani vrstice.

Pogled tabele ima način urejanja in običajni (izbrani) način. Ko pogled tabele preide v način urejanja, bo prikazal kontrolnike za urejanje in preurejanje, povezane z njegovo vrstico. Nadzor prerazporeditve omogoča uporabniku, da premakne vrstico na drug položaj v tabeli. Kot je prikazano na sliki 8-1, se kontrolnik za preurejanje prikaže na desni strani vrstice.



Slika 8-1 Preurejanje vrstice



Ko pogled tabele preide v način urejanja in ko uporabniki povlečejo kontrolnik za preurejanje, pogled tabele pošlje vrsto sporočil svojemu viru podatkov in pooblaščencu, vendar le, če izvajajo te metode. Te metode omogočajo viru podatkov in pooblaščencu, da omejijo, ali in kam je mogoče premakniti vrstico in kam dejansko premikati. V naslednjih razdelkih je prikazano, kako premikate vrstice v pogledu tabele.



Ko pogled tabele preide v način urejanja in uporabnik povleče kontrolnik za preurejanje, pogled tabele pošlje vrsto sporočil svojemu viru podatkov in agentu, vendar le, če izvaja te metode. Te metode omogočajo virom podatkov in agentom, da omejijo položaj premikanja vrstic in stolpcev za izvajanje dejanskih operacij premikanja. Naslednji razdelek vam bo pokazal, kako premikate vrstice v pogledu tabele.

Kaj se zgodi, ko se vrstica preseli

Pogled tabele preide v način urejanja, ko prejme sporočilo setEditing: animirano:. Običajno se to zgodi, ko uporabnik tapne gumb Uredi v navigacijski vrstici, vendar lahko po želji uporabite lastne kontrolnike. V načinu urejanja pogled tabele prikaže vse kontrolnike za preurejanje in urejanje, ki jih je pooblaščenec dodelil vsaki vrstici. Delegat dodeli kontrolnike v tableView: cellForRowAtIndexPath: z nastavitvijo lastnosti showReorderControl objektov UITableViewCell na YES. Da se lahko pojavijo kontrolniki za preurejanje, mora vir podatkov podpirati preurejanje z izvajanjem metode tableView: moveRowAtIndexPath: toIndexPath:.

Pogled tabele preide v način urejanja, ko prejme sporočilo setEditing: animirano:. Običajno se to zgodi, ko uporabnik v navigacijski vrstici klikne gumb za urejanje, če pa želite, lahko uporabite lastne kontrolnike. V načinu urejanja pogled tabele prikaže vse kontrolnike za preurejanje in urejanje, ki jih dodeli vsaki vrstici. Delegirajte nadzor v tableView: cellForRowAtIndexPath: za dodelitev kontrolnega tableView: cellForRowAtIndexPath: z nastavitvijo lastnosti showReorderControl predmeta UITableViewCell na YES. Da se lahko prikaže kontrolnik za preurejanje, mora vir podatkov podpirati preurejanje z izvajanjem metode tableView: moveRowAtIndexPath: toIndexPath:.



Opomba: Če objekt UIViewController upravlja pogled tabele, ob pritisku na gumb Uredi samodejno prejme sporočilo setEditing: animated:. UITableViewController, podrazred UIViewController, izvaja to metodo za posodobitev stanja gumba in priklic različice metode v pogledu tabele. Če za upravljanje tabele uporabljate UIViewController, morate uporabiti enako vedenje.

Opomba: Če objekt UIViewController upravlja pogled tabele, bo samodejno prejel sporočilo setEditing: animated: ob kliku na gumb Uredi. UITableViewController je podrazred UIViewController, ki izvaja to metodo za posodobitev stanja gumba in priklic različice metode pogleda tabele. Če za upravljanje pogledov tabel uporabljate UIViewController, morate uporabiti enako vedenje.

Ko pogled tabele prejme setEditing: animated :, pošlje isto sporočilo objektu UITableViewCell za vsako vidno vrstico. Nato pošlje zaporedje sporočil svojemu viru podatkov in njegovemu pooblaščencu (če izvajajo metode), kot je prikazano v diagramu na sliki 8-2.

Ko pogled tabele prejme setEditing: animated :, pošlje isto sporočilo objektu UITableViewCell za vsako vidno vrstico. Nato pošlje vrsto sporočil svojemu viru podatkov in agentu (če izvajajo te metode), kot je prikazano na sliki 8-2.

Slika 8-2 Zaporedje klicev za preurejanje vrstice v pogledu tabele

Ko pogled tabele prejme sporočilo setEditing: animated:, pošlje isto sporočilo objektom celice, ki ustrezajo njegovim vidnim vrsticam. Po tem je zaporedje sporočil naslednje:

Ko pogled tabele prejme sporočilo setEditing: animirano:, bo isto sporočilo znova poslal predmetu celice, ki ustreza njegovi vidni vrstici. Po tem je zaporedje sporočil naslednje:

  1. Pogled tabele pošlje sporočilo tableView: canMoveRowAtIndexPath: svojemu viru podatkov (če implementira metodo). Pri tej metodi lahko delegat selektivno izključi nekatere vrstice, da ne prikaže kontrolnika za preurejanje.
  2. Uporabnik povleče vrstico s kontrolnikom za preurejanje gor ali dol v pogledu tabele. Ko vlečena vrstica lebdi nad delom pogleda tabele, osnovna vrstica drsi navzdol, da pokaže, kje bi bil cilj.
  3. Vsakič, ko je povlečena vrstica nad ciljem, pogled tabele pošlje svojstabilView: targetIndexPathForMoveFromRowAtIndexPath: toProposedIndexPath: svojemu pooblaščencu (če izvaja metodo). Pri tej metodi lahko pooblaščenec zavrne trenutni cilj vlečene vrstice in poda alternativni.
  4. Pogled tabele pošlje tableView: moveRowAtIndexPath: toIndexPath: svojemu viru podatkov (če izvaja metodo). Pri tej metodi vir podatkov posodobi matriko podatkovnega modela, ki je vir elementov za pogled tabele, in element premakne na drugo mesto v matriki.

  5. Pogled tabele pošlje sporočilo tableView: canMoveRowAtIndexPath: svojemu viru podatkov (če izvaja to metodo). Pri tej metodi lahko ravnatelj selektivno izloči nekatere vrstice, ki prikazujejo nadzor preurejanja.

  6. Uporabnik povleče vrstico skozi kontrolnik za preurejanje pogleda tabele navzgor ali navzdol. Ko vlečena vrstica lebdi nad delom pogleda tabele, spodnja vrstica drsi navzdol, da prikaže ciljno lokacijo.
  7. Kadar povlečena vrstica preseže cilj, pogled tabele pošlje tableView: targetIndexPathForMoveFromRowAtIndexPath: toProposedIndexPath: svojemu pooblaščencu (če izvaja to metodo). Pri tej metodi lahko pooblaščenec zavrne trenutni cilj vlečene vrstice in poda alternativne cilje.
  8. Pogled tabele pošlje tableView: moveRowAtIndexPath: toIndexPath: na vir podatkov (če izvaja to metodo). Pri tej metodi vir podatkov posodobi matriko podatkovnega modela, ki je vir elementov pogleda tabele, in element premakne na drugo mesto v matriki.

Primeri premikanja vrstice

Ta odsek komentira nekaj vzorčne kode, ki ponazarja korake preurejanja, naštete v tem, kaj se zgodi, ko se vrstica preseli. Seznam 8-1 prikazuje izvedbo tableView: canMoveRowAtIndexPath: ki izključuje preurejanje prve vrstice v pogledu tabele (ta vrstica nima nadzora preurejanja).

Ta odsek pregleduje nekaj vzorčne kode, ki prikazuje korake preurejanja, ki se zgodijo pri premestitvi vrstic. Seznam 8-1 prikazuje tableView: canMoveRowAtIndexPath: Implementacija tableView: canMoveRowAtIndexPath: Prva vrstica v pogledu tabele je izključena iz preurejanja (vrstica nima kontrolnikov za preurejanje).

Seznam 8-1 Izključitev vrstice iz selitve

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row == 0) // Don't move the first row return NO return YES }

Ko uporabnik konča vlečenje vrstice, v pogledu tabele zdrsne na svoj cilj, ki v svoj vir podatkov pošlje tableView: moveRowAtIndexPath: toIndexPath:. Seznam 8-2 prikazuje izvajanje te metode.

Ko uporabnik konča vlečenje vrstice, bo v pogledu tabele zdrsnil na svoj ciljni položaj, ki pošlje tableView: moveRowAtIndexPath: toIndexPath: na svoj ciljni vir podatkov. Seznam 8-2 prikazuje izvajanje te metode.

Seznam 8-2 Posodabljanje matrike podatkovnega modela za preseljeno vrstico

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath { NSString *stringToMove = [self.reorderingRows objectAtIndex:sourceIndexPath.row] [self.reorderingRows removeObjectAtIndex:sourceIndexPath.row] [self.reorderingRows insertObject:stringToMove atIndex:destinationIndexPath.row] }

Delegat lahko predlagani cilj tudi ponovno ciljno premakne v drugo vrstico z izvajanjem metode tableView: targetIndexPathForMoveFromRowAtIndexPath: toProposedIndexPath: Naslednji primer omejuje premestitev vrstic v lastni skupini in preprečuje premike v zadnjo vrstico skupine (ki je rezervirana za rezervirano mesto dodatka).

Z izvajanjem metode tableView: targetIndexPathForMoveFromRowAtIndexPath: toProposedIndexPath: metoda lahko posreduje predlagani cilj tudi v drugo vrstico. Naslednji primer omejuje vrstico na premestitev v lastni skupini in preprečuje premik v zadnjo vrstico skupine (rezervirano za dodajanje ograd za elemente).

Seznam 8-3 Ponovno ciljanje na ciljno vrstico operacije premika

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath { NSDictionary *section = [data objectAtIndex:sourceIndexPath.section] NSUInteger sectionCount = [[section valueForKey:@'content'] count] if (sourceIndexPath.section != proposedDestinationIndexPath.section) { NSUInteger rowInSourceSection = (sourceIndexPath.section > proposedDestinationIndexPath.section) ? 0 : sectionCount - 1 return [NSIndexPath indexPathForRow:rowInSourceSection inSection:sourceIndexPath.section] } else if (proposedDestinationIndexPath.row >= sectionCount) { return [NSIndexPath indexPathForRow:sectionCount - 1 inSection:sourceIndexPath.section] } // Allow the proposed destination. return proposedDestinationIndexPath }