Getting UITableViewCell with superview in iOS 7
A better solution is to add a category for UIView(SuperView), and calling it by:
UITableViewCell *cell = [button findSuperViewWithClass:[UITableViewCell class]]
This way, your code works for all future and past iOS versions
@interface UIView (SuperView)- (UIView *)findSuperViewWithClass:(Class)superViewClass;@end@implementation UIView (SuperView)- (UIView *)findSuperViewWithClass:(Class)superViewClass { UIView *superView = self.superview; UIView *foundSuperView = nil; while (nil != superView && nil == foundSuperView) { if ([superView isKindOfClass:superViewClass]) { foundSuperView = superView; } else { superView = superView.superview; } } return foundSuperView;}@end
The best way to do this is:
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];UITableViewCell *cell = (UITableViewCell*)[self.tableView cellForRowAtIndexPath:indexPath];
To complete the answer of @thomas-keuleers this is the swift method:
extension UIView { func findSuperViewWithClass<T>(superViewClass : T.Type) -> UIView? { var xsuperView : UIView! = self.superview! var foundSuperView : UIView! while (xsuperView != nil && foundSuperView == nil) { if xsuperView.self is T { foundSuperView = xsuperView } else { xsuperView = xsuperView.superview } } return foundSuperView }}
and you simply call like that:
child.findSuperViewWithClass(TableViewCell)