Ho una vista tabella con due azioni, per la prima volta utilizzo il delegato didSelectRowAtIndexPath, per la seconda vorrei usare un'azione su un pulsante della mia cella per fare qualcos'altro. Il mio problema è che non riesco ad ottenere il percorso index? Qual è la migliore pratica per farlo.Come ottenere indexPath in una vista tabella da un'azione del pulsante in una cella?
risposta
Se è stato aggiunto il pulsante alla cella come,
[cell.contentView addSubview:button];
allora, è possibile ottenere il percorso indice come,
- (void)onButtonTapped:(UIButton *)button {
UITableViewCell *cell = (UITableViewCell *)button.superview.superview;
NSIndexPath *indexPath = [tableView indexPathForCell:cell];
// Go ahead
}
Grazie! UIButton * button = (UIButton *) mittente; UITableViewCell * cell = (UITableViewCell *) button.superview.superview; –
OK! Benvenuto! – EmptyStack
Non si deve accedere alla tabellaView dal superview. Mentre questo funziona ora potrebbe non funzionare su un nuovo iOS. Esempio classico da 6/7 Apple ha aggiunto un'altra superview. Questo si bloccherebbe – CW0007007
qui è il codice completo per un pulsante personalizzato:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
CustomCellFilter *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {cell = [[CustomCellFilter alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];}
//configure your cell here
cell.titleLabel.text = @"some title";
//add button
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
resetButton.frame = CGRectMake(40, 10, 18, 18);
[resetButton addTarget:self action:@selector(onButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
[resetButton setImage:[UIImage imageNamed:@"someimage.png"] forState:UIControlStateNormal];
[cell.contentView addSubview:myButton];
//afterwards return the cell
return cell;
- (void)onButtonTapped:(UIButton *)button {
UITableViewCell *cell = (UITableViewCell *)button.superview.superview;
NSIndexPath *indexPath = [filterTable indexPathForCell:cell];
NSLog(@"%@", indexPath);
//use indexPath here...
}
Nel caso in cui il pulsante viene spostato o Apple modifica la gerarchia di viste per le viste accessorie, questo metodo aumenta la catena per apparire per un UITableViewCell:
- (void)tapAccessoryButton:(UIButton *)sender {
UIView *parentView = sender.superview;
// the loop should take care of any changes in the view heirarchy, whether from
// changes we make or apple makes.
while (![parentView.class isSubclassOfClass:UITableViewCell.class])
parentView = parentView.superview;
if ([parentView.class isSubclassOfClass:UITableViewCell.class]) {
UITableViewCell *cell = (UITableViewCell *) parentView;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
[self tableView:self.tableView accessoryButtonTappedForRowWithIndexPath:indexPath];
}
}
sto usando questa soluzione - ottenendo percorso dell'indice di cellulari utilizzando i punti
CGPoint center= [sender center];
CGPoint rootViewPoint = [[sender superview] convertPoint:center toView:_tableView1];
NSIndexPath *indexPath = [_tableView1 indexPathForRowAtPoint:rootViewPoint];
NSLog(@"%@",indexPath);
Il suo lavoro perfettamente
Questo è più appropriato invece di usare 'superView.superView' – Mrug
Nel caso in cui si utilizza una vista raccolta, è può utilizzare il metodo Yogesh, ma cambiare indexPathForRowAtPoint per indexPathForItemAtPoint come questo:
CGPoint center= [sender center];
CGPoint rootViewPoint = [[sender superview] convertPoint:center toView:_tableView1];
NSIndexPath *indexPath = [_tableView1 indexPathForRowAtPoint:rootViewPoint];
NSLog(@"%@",indexPath);
- 1. iOS: `UICollectionview`, come ottenere` contentoffset` di una cella con `indexPath`
- 2. IOS 7 - Come ottenere indexPath dal pulsante inserito in UITableViewCell
- 3. Passare a una vista di dettaglio da una tabella Visualizza cella utilizzando Xcode Storyboard
- 4. Come ottenere il testo della cella basato su indexPath?
- 5. Attivare un metodo da una cella statica in una vista Tabella Controller
- 6. Come posso ottenere uitableViewCell da indexPath?
- 7. Ottenere il valore da una cella Gridview
- 8. Come trovare indexPath per il pulsante accessorio toccato in tableView
- 9. Ottieni IndexPath dall'interno di una sottoclasse UITableViewCell in Swift
- 10. Come posso creare una cella di tabella multilinea in iOS?
- 11. Evidenziazione Evidenziazione cella in una vista datagrid
- 12. linee mulitiple in una cella in una vista datagrid
- 13. WPF - Come ottenere una cella da una DataGridRow?
- 14. linee multiple in una cella di una tabella
- 15. Cellpadding in una cella di tabella html
- 16. Come conoscere indexPath/row al clic sul pulsante della cella Tableview in un UITableView?
- 17. Come ottenere il indexPath di un UIButton in un UITableViewCell?
- 18. Come unire una riga in una cella in Layout tabella in Android, in modo dinamico?
- 19. Come ottenere dati da una tabella J?
- 20. Come utilizzare un UIWebView in una cella di tabella?
- 21. Selezionare una casella di controllo in una cella di tabella facendo clic in qualsiasi punto della cella della tabella
- 22. Come posso ottenere il frame di una cella di visualizzazione tabella nello spazio delle coordinate della vista tabella?
- 23. Come posso memorizzare qualcosa per una vista tabella?
- 24. In JQuery come posso ottenere la cella della tabella adiacente?
- 25. Dati da due tabelle in una vista
- 26. come aggiungere un sottotesto a una cella di tabella?
- 27. Dividere una cella di tabella in due colonne in HTML
- 28. Ottieni l'ultima cella in una sezione Uitableview
- 29. Come aggiungere un pulsante cliccabile sulla cella della tabella?
- 30. PyQt - Come impostare QComboBox in una vista tabella usando QItemDelegate
possibile duplic mangiato di [IOS 7 - Come ottenere indexPath dal pulsante posizionato in UITableViewCell] (http://stackoverflow.com/questions/19000356/ios-7-how-to-get-the-indexpath-from-button-placed- in-uitableviewcell) –