2010-01-27 12 views
228

Potrzebuję usunąć wiersz 1 tabeli w funkcji, którą zdefiniowałem. Aby użyć deleteRowAtIndexPath, musisz użyć IndexPath z zdefiniowaną sekcją i wierszem. Jak mogę utworzyć taką ścieżkę?Jak utworzyć NSIndexPath dla TableView

Tablica z int {1} jako jedynym członkiem ulegnie awarii; komunikat NSLog stwierdza, że ​​sekcja musi również zostać zdefiniowana.

* Edit -> Kod odnosząca się do komórki usunięcia:

NSIndexPath *myIP = [[NSIndexPath alloc] indexPathForRow:0 inSection:0]; 
    NSArray *myArray = [[NSArray alloc] initWithObjects:myIP, nil]; 
// [self.tableView beginUpdates]; 
    [self.tableView deleteRowsAtIndexPaths:myArray withRowAnimation:UITableViewRowAnimationFade]; 
// [self.tableView endUpdates]; 

Odpowiedz

612

Zastosowanie [NSIndexPath indexPathForRow:inSection:] szybko utworzyć ścieżkę indeksu.

Edit: W Swift 3:

let indexPath = IndexPath(row: rowIndex, section: sectionIndex) 
+2

Dzięki za odpowiedź. Program nadal się zawiesza - raportuje NSLog: *** Kończenie aplikacji z powodu nieprzechwyconego wyjątku "NSInvalidArgumentException", powód: "*** - [NSIndexPath indexPathForRow: inSection:]: nierozpoznany selektor wysłany do instancji –

+0

Początkowo uznałem, że jest problem z IndexPath. Czy coś jeszcze się dzieje? Wygląda na to, że mogę używać niepoprawnie usunąć .. –

+0

- [NSIndexPath indexPathForRow: inSection:] nie ma w mojej dokumentacji. Czy istnieje odpowiedź korzystająca z udokumentowanych interfejsów API? (Przyznaję, że to trochę dziwne, że go tam nie ma WTH ?!) – Olie

115

indexPathForRow jest metodą klasy!

Kod powinien brzmieć:

NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0] ; 
17

obowiązkowa odpowiedź w Swift: NSIndexPath(forRow:row, inSection: section)

Można zauważyć, że NSIndexPath.indexPathForRow(row, inSection: section) nie jest dostępne w szybki i należy użyć pierwszej metody do skonstruowania indexPath.

+0

Mam te same problemy! Użyłem 'forRow: 0' i' inSection: 0'. To dobrze działa. Zawiera tylko pierwszy obiekt z tablicy! Jak mogę to naprawić? Możesz mi pomóc? –

+0

Czy mógłbyś rozwinąć? Ta metoda ma zwrócić pojedynczą wartość NSIndexPath dla określonego wiersza i sekcji. Więc to zwróci tylko indexPath [0,0] – JohnVanDijk

17

Dla Swift 3 to teraz: IndexPath(row: rowIndex, section: sectionIndex)

+6

Dzięki za dodanie Swift 3. Kompilator chwycił mnie za 'let cell = self.myTableView.cellForRow (at: NSIndexPath (rząd: 0, sekcja: 1))' i zmieniono go na 'let cell3 = self.myTableView.cellForRow (at: IndexPath (row: 0, section: 1))', więc wydają się migrować z NSIndexPath do IndexPath –

Powiązane problemy