我有一个带有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中从步进器获取单元的最佳方法是什么?
由于
尼古拉
答案 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.Row
与data-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;
//...
}