iOS7:来自其子视图的UITableViewCell

时间:2013-10-02 10:29:32

标签: uitableview ios7

我有一个带有UIStepper的UITableViewCell。当步进器值改变时,它会触发一个方法:

-(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中从步进器获取单元的最佳方法是什么?

由于

尼古拉

3 个答案:

答案 0 :(得分:1)

试试这个。我没有测试它,但我使用类似的代码来查找视图的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;
}

答案 1 :(得分:1)

为什么不在tag方法UIStepper中设置indexPath.Rowdata-source相同的cellForRowAtIndexPath

然后在stepperDidStep:方法中,使用cellForRowAtIndexPath:获取所需的单元格,如下所示:

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

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

答案 2 :(得分:0)

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

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

类似的东西:

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

-(void) stepperDidStep: (CellStepper*) sender
{
 UITableViewCell *cell = sender.cell;
 //...
}