iOS7:UITableViewCell从其一个子视图中删除

iOS7:UITableViewCell从其一个子视图中删除,uitableview,ios7,Uitableview,Ios7,我有一个UITableViewCell,上面有一个UIStepper。当步进器值更改时,会触发一种方法: -(void) stepperDidStep: (UIStepper*) sender 我需要从发件人处获取UITableViewCell 在iOS7之前,此代码工作正常: -(void) stepperDidStep: (UIStepper*) sender { UITableViewCell *cell = (UITableViewCell*) sender.superview.su

我有一个UITableViewCell,上面有一个UIStepper。当步进器值更改时,会触发一种方法:

-(void) stepperDidStep: (UIStepper*) sender
我需要从发件人处获取UITableViewCell

在iOS7之前,此代码工作正常:

-(void) stepperDidStep: (UIStepper*) sender
{
 UITableViewCell *cell = (UITableViewCell*) sender.superview.superview;
 //...
}
现在,在iOS7+Autolayout中,我得到以下信息:

UITableViewCell *cell = (UITableViewCell*) sender.superview; 
单元格为UITableViewCellContentView

UITableViewCell *cell = (UITableViewCell*) sender.superview.superview;
单元格为UITableViewCellScrollView(?)

问题:在iOS7中,从步进机获取细胞的最佳方式是什么

谢谢


Nicola

不要通过检查superview来获取单元格。这太不可靠了。该单元有一些隐藏的视图,这使事情更加复杂

相反,子类UIStepper并为其提供UITableViewCell的自定义属性(可能是弱引用),然后在设置UIStepper时将其设置为单元格,然后在调用stepperdistep:方法时获取单元格

比如:

@interface CellStepper : UIStepper
@property (nonatomic, weak) UITableViewCell* cell;
@end


试试这个。我没有测试它,但我正在使用类似的代码来查找视图的viewcontroller

- (UITableViewCell *)tableCellUnderView:(UIView *)view {
    Class class = [UITableViewCell class];
    // Traverse responder chain. Return first found UITableViewCell
    UIResponder *responder = view;
    while ((responder = [responder nextResponder]))
        if ([responder isKindOfClass:class])
            return (UITableViewCell *)responder;

    return nil;
}

为什么不将
UIStepper
标记设置为与
data source
方法
cellforrowatinexpath
中的
indexPath.Row
相同呢

然后在
stepperdistep:
方法中,使用
cellforrowatinexpath:
获得所需的单元格,如下所示:

-(void) stepperDidStep: (UIStepper*) sender{

     UITableViewCell *cell = (UITableViewCell*)[yourTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:sender.tag inSection:0];
}
-(void) stepperDidStep: (UIStepper*) sender{

     UITableViewCell *cell = (UITableViewCell*)[yourTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:sender.tag inSection:0];
}