Arun Arun - 3 months ago 9
iOS Question

IOS 7 - How to get the indexPath from button placed in UITableViewCell

I've programmatically created a UITableView and added UISwitch to it's cell accessory view.

This is my code for UISwitch in cell accessory view in

cellForRowAtIndexPath
method.

UISwitch *accessorySwitch = [[UISwitch alloc]initWithFrame:CGRectZero];
[accessorySwitch setOn:NO animated:YES];
[accessorySwitch addTarget:self action:@selector(changeSwitch:) forControlEvents:UIControlEventValueChanged];
cell.accessoryView = accessorySwitch;


This is the method which is called after the button is clicked.

- (void)changeSwitch:(UISwitch *)sender{

UITableViewCell *cell = (UITableViewCell *)[sender superview];

NSIndexPath *indexPath = [self.filterTableView indexPathForCell:cell];
NSLog(@"%ld",(long)indexPath);

……………. My other code…….
}


I am able to print the index path value in iOS 6
But in iOS 7 it prints nil,

Am i missing anything in iOS 7 or there is some other approach to get the indexPath in iOS 7

Thanks,
Arun.

Answer

NSLog(@"%ld",(long)indexPath); is wrong this will print the pointer address of indexPath

try using following codes

CGPoint center= sender.center; 
  CGPoint rootViewPoint = [sender.superview convertPoint:center toView:self.filterTableView];
  NSIndexPath *indexPath = [self.filterTableView indexPathForRowAtPoint:rootViewPoint];
  NSLog(@"%@",indexPath);