NSIndexPath van UITableViewCell-subview?

Is er een was om de NSIndexPath van een inhoud van de UITableViewCellViewView-subview te krijgen?

In mijn geval heb ik een tabelweergave waarin elke rij is verdeeld in 3 knoppen. Ik kan het knoplabel gebruiken om bij te houden welke kolom het is, maar ik moet ook weten naar welke rij van de tabel het een subweergave is (wanneer de gebruiker op de knop tikt).

Omdat de knop de volledige rij van de tabelweergave blokkeert, is didSelectRowAtIndexPath nooit aangeroepen (wat wordt verwacht), dus ik kan het niet zo krijgen.

Ik heb geprobeerd [ditButton superview] maar dat lijkt niet te werken. Wat denk jij?

5

3 antwoord

Ik neem aan dat de knop het bericht UIControlEventTouchUpInside naar uw view-controller verzendt? Dan zou je iets kunnen doen als:

- (void)buttonPressed:(UIButton *)button
{
    CGPoint location = [button.superview convertPoint:button.center toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
    [self doSomethingWithRowAtIndexPath:indexPath];
}
19
toegevoegd
Dit antwoord is eigenlijk iets meer waar ik voor ging en eleganter.
toegevoegd de auteur Keller, de bron
Hmm .. Het lijkt niet te werken voor mijn derde kolom met knoppen. Het converteren van de aanraaklocatie is correct, maar op indexPathForRowAtPoint retourneert het 0 voor elke knop in de 3e kolom (werkt wel voor de eerste twee kolommen). Zou het iets te maken kunnen hebben met een landschapsvisie?
toegevoegd de auteur Keller, de bron
Ook ongevoelig voor inserts/deletes/herschikken van rijen, als u ervoor kiest om dat te doen.
toegevoegd de auteur gschandler, de bron
Sorry, ik was aan het converteren van de verkeerde coördinaatruimte. Omdat ik de knop center gebruikte, had ik moeten converteren vanuit de coördinaatruimte superview . Ik heb het codefragment bijgewerkt.
toegevoegd de auteur gschandler, de bron

One possible option is when making the cell for index path you can assign the tag to be 3 * row_number + <the tag number>. then just divide the tag by 3 to get the row and %3 to get the button.

2
toegevoegd
Werkt voor mij, heel erg bedankt!
toegevoegd de auteur Keller, de bron

U hoeft button.superview niet te bellen. U kunt rechtstreeks vanuit elk suboverzicht in de structuur rechtstreeks naar het tabeloverzicht gaan

Doelstelling C

- (NSIndexPath *)indexPathForCellContainingView:(UIView *)view inTableView:(UITableView *)tableView {
    CGPoint viewCenterRelativeToTableview = [tableView convertPoint:CGPointMake(CGRectGetMidX(view.bounds), CGRectGetMidY(view.bounds)) fromView:view];
    NSIndexPath *cellIndexPath = [tableView indexPathForRowAtPoint:viewCenterRelativeToTableview];
    return cellIndexPath
}

Snel

func indexPathForCellContainingView(view: UIView, inTableView tableView:UITableView) -> NSIndexPath? {
    let viewCenterRelativeToTableview = tableView.convertPoint(CGPointMake(CGRectGetMidX(view.bounds), CGRectGetMidY(view.bounds)), fromView:view)
    return tableView.indexPathForRowAtPoint(viewCenterRelativeToTableview)
}
1
toegevoegd