2011-10-17 11 views
27

Mam UITableView.In, że utworzyłem niestandardową komórkę z przycisku akcesoriów. Teraz klikając przycisk akcesoriów chcę utworzyć inny widok z funkcją edycji komórek.Dla tego, jak znaleźć indeksu ścieżki tej komórki? I jak zrobić przekazuję vales tej komórki?Jak uzyskać Indexpath komórki w UITableView, klikając przycisk Custom accessory?

jak zgłoszę następujący sposób:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 
+0

w tej metodzie tylko Ty dostajesz ścieżkę indeksową – Narayana

+0

czy Twój przycisk jest niestandardowy? jeśli nie, zobacz ostatni argument metody. Daje ona ścieżkę indeksu – Maulik

Odpowiedz

84

Pierwszą rzeczą, aby pamiętać, jest to, że podczas korzystania z niestandardowych accessoryView w komórce wówczas tableView: accessoryButtonTappedForRowWithIndexPath: metoda delegat nie można nazwać. Musisz dodać cel/akcję do przycisku, który dodajesz jako niestandardowe akcesorium i samemu poradzić sobie z dotknięciem przycisku. Należy dodać coś niestandardowego osprzętu takiego,

UIButton *accessory = ...; 
[accessory addTarget:self action:@selector(onCustomAccessoryTapped:) forControlEvents:UIControlEventTouchUpInside]; 
... 
cell.accessoryView = accessory; 

A w onCustomAccessoryTapped: metody trzeba uzyskać ścieżkę indeksu takiego,

- (void)onCustomAccessoryTapped:(UIButton *)sender { 

    UITableViewCell *cell = (UITableViewCell *)sender.superview; 
    NSIndexPath *indexPath = [tableView indexPathForCell:cell]; 

    // Now you can do the following 
    [self tableView:tableView accessoryButtonTappedForRowWithIndexPath:indexPath]; 

    // Or you can do something else here to handle the action 
} 
+0

co jeśli przycisk jest tworzony w UITableViewCell? – Maulik

+0

Masz na myśli "co jeśli przycisk zostanie utworzony wewnątrz * cellForRowAtIndexPath: * method"? – EmptyStack

+0

no ... Mam niestandardową komórkę przez podkatalog UITableViewCell. do tego, jeśli użyłem powyższego kodu, to zwraca UITableViewCellContainView !!! – Maulik

3

indexPath jest przekazywana jako drugi parametr metody.

3

używając „indexPathForCell” działa jak wspomniano przez emptystack

[yourViewController.tableView indexPathForCell: cell];

Ponadto jeśli używasz tableview i Search View, w kontrolerze upewnij się, aby skorzystać searchDisplayController

NSIndexPath *indexPath; 
NSDictionary *campaignMember; 
if(self.searchDisplayController.isActive) { 
     indexPath = [[self.searchDisplayController searchResultsTableView] indexPathForCell: cell]; 
     campaignMember = [self.filterResults objectAtIndex:indexPath.row]; 
} else { 
    indexPath = [self.tableView indexPathForCell: cell]; 
    campaignMember = [self.dataRows objectAtIndex:indexPath.row]; 
} 
NSString *id = [campaignMember objectForKey:@"Id"]; 

w moim przypadku „campaignMember” jest obiektem osobą i potrzebne, aby dostać swój identyfikator. "self.dataRows" to tablica przechowująca dane tabeli głównej, gdzie jako "self.filterResults" zawiera podzbiór lub wyniki wyszukiwania/filtrowania wszystkich danych w oparciu o kryteria wyszukiwania/filtrowania.

Powiązane problemy