Jeg har en visningskontroller med en tabellvisning og en egen nib for tabellcellemalen. Cellemalen har noen knapper. Jeg ønsker å få tilgang til knappeklikket sammen med indeksen for cellen det ble klikket på i visningskontrolleren der jeg har definert tabellvisningen.
Så jeg har ViewController.h
og ViewController.m
hvor jeg har UITableView
og TableTemplate.h
, TableTemplate.m
og TableTemplate.xib
hvor jeg har definert nib. Jeg vil ha knappeklikkhendelsen med celleindeks i ViewController.m
.
Noen hjelp til hvordan kan jeg gjøre det?
cellForRowAtIndexPath:
tilordner du knappekoden som indeks:cell.yourbutton.tag = indexPath.row;
[cell.yourbutton addTarget:self action:@selector(yourButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
ViewControler
:-(void)yourButtonClicked:(UIButton*)sender
{
if (sender.tag == 0)
{
// Your code here
}
}
Oppdateringer for flere seksjoner:
Du kan sjekke denne lenken for å oppdage knappeklikk i tabellvisningen for flere rader og seksjoner.
Dette burde hjelpe :-)
UITableViewCell* cell = (UITableViewCell*)[sender superview];
NSIndexPath* indexPath = [myTableView indexPathForCell:cell];
Her er sender UIButton-forekomsten som sender hendelsen. myTableView er UITableView-forekomsten du har å gjøre med.
Det er bare å få cellereferansen riktig, så er alt arbeidet gjort.
Det kan hende du må fjerne knappene fra cellens contentView & legge dem direkte til UITableViewCell-forekomsten som dens undervisning.
Eller
Du kan formulere et navngivningsskjema for ulike UIButtons i cell.contentView. Ved hjelp av denne taggen kan du senere få vite rad- og seksjonsinformasjonen etter behov.
Tarun's kode fungerer ikke på iOS7, siden UITableViewCell-strukturen ble endret, og nå får han "UITableViewCellScrollView" i stedet.
Dette innlegget https://stackoverflow.com/questions/18962771/getting-uitableviewcell-with-superview-in-ios-7 har en god løsning som oppretter en løkke for å finne riktig overordnet visning, uavhengig av eventuelle fremtidige endringer i strukturen. Det koker ned til å lage en løkke:
UIView *superView = [sender superview];
UIView *foundSuperView = nil;
while (nil != superView && nil == foundSuperView) {
if ([superView isKindOfClass:[UITableViewCell class]]) {
foundSuperView = superView;
} else {
superView = superView.superview;
}
}
Lenken inneholder kode for en mer gjenbrukbar løsning, men dette bør fungere.