Getting UITableViewCell with superview in iOS 7 Getting UITableViewCell with superview in iOS 7 objective-c objective-c

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)