2017-12-27 13 views
0

Ich habe bereits eine Lösung gefunden, wie man Berührung in meiner Zelle erkennt, aber sie sind für einen Abschnitt gemacht. Ich habe mehr als 1 (8 TBh). Der folgende Code macht für wenige Zellen statt für einen Kontakt. Also Frage ist, was ist die klare Lösung für mein Problem? Hier ist der Code:Wie erkennen Sie Berührungen auf UIView von UITableViewCell mit mehr als einem Abschnitt?

- (CatalogItemTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
CatalogItemTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 

CatalogItemModel *currentItemModel; 

if(isCatSelected) { 
    currentItemModel = [[self.itemsArray objectForKey:[[self.sectionArray objectAtIndex:selectedIndexPath] valueForKey:@"id"]] objectAtIndex:indexPath.row]; 
} else { 
    currentItemModel = [[self.itemsArray objectForKey:[[self.sectionArray objectAtIndex:indexPath.section] valueForKey:@"id"]] objectAtIndex:indexPath.row]; 
} 

[cell setItemModel:currentItemModel]; 

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self 
                        action:@selector(didTapFav:)]; 
[cell.overFavorite addGestureRecognizer:gestureRecognizer]; //overFavorite is UIView to detect touch 

return cell; 
} 

Aktion func:

-(void)didTapFav:(UITapGestureRecognizer*)recognizer { 
NSString *token = [ProfileManager getToken]; 
if(token.length > 0){ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"addToFavorite" object:self]; 
} else { 
    [self showErrorWithTitle:@"Auth" andText:@"To add item in Favorite!"]; 
} 

}

Funktion innerhalb CatalogItemTableViewCell:

-(void)addToFavorite { 
    if(isFavorite) { 
     [ApiManager tryAddToFavItem:[NSString stringWithFormat:@"%ld", (long)self.currentModel.uid] :^{ 
      //Some API request 
     }]; 
    } 
} 
+0

Verwenden Sie ein Delegierungsmuster oder einen Abschluss. Siehe [diese Antworten] (https://stackoverflow.com/questions/28659845/swift-how-to-get-the-indexpath-row-when-a-button-in-a-cell-is-tapped/38941510# 38941510) – Paulw11

+0

Geben Sie der Zielansicht ein Tag. –

+0

@ElTomato verwenden keine Tags zur Darstellung von Indexpfaden. Es schlägt fehl, wenn Zeilen eingefügt, gelöscht oder verschoben werden können. – rmaddy

Antwort

0

Zu allererst hinzufügen GestureRecognizer für Collection

UIGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)]; tapGesture.delegate = self; [self.collectionView addGestureRecognizer:tapGesture];

dann den IndexPath oder die Zelle abrufen, auf die Sie zugreifen möchten - (void) tap: (UITapGestureRecognizer *) sender;

if (sender.state == UIGestureRecognizerStateEnded) { 

    NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:[sender locationInView:self.collectionView]]; 
} 
Verwandte Themen