iOS7:来自其子视图之一的 UITableViewCell
Posted
技术标签:
【中文标题】iOS7:来自其子视图之一的 UITableViewCell【英文标题】:iOS7: UITableViewCell from one of its subviews 【发布时间】:2013-10-02 10:29:32 【问题描述】:我有一个 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 中从步进器获取单元格的最佳方法是什么?
谢谢
尼古拉
【问题讨论】:
【参考方案1】:为什么不在data-source
方法cellForRowAtIndexPath
中将UIStepper
的tag
设置为与indexPath.Row
相同?
然后在stepperDidStep:
方法中,使用cellForRowAtIndexPath:
获取所需的单元格,如下所示:
-(void) stepperDidStep: (UIStepper*) sender
UITableViewCell *cell = (UITableViewCell*)[yourTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:sender.tag inSection:0];
【讨论】:
【参考方案2】:试试这个。我没有测试它,但是我正在使用类似的代码来查找视图的视图控制器
- (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;
【讨论】:
【参考方案3】:不要通过检查超级视图来获取单元格。太不靠谱了。该单元格有一些隐藏的视图,这使事情变得更加复杂。
相反,继承 UIStepper 并为其提供 UITableViewCell 的自定义属性(可能是弱引用),然后在设置 UIStepper 时将其设置为单元格,然后在调用 stepperDidStep: 方法时获取单元格。
类似:
@interface CellStepper : UIStepper
@property (nonatomic, weak) UITableViewCell* cell;
@end
.
-(void) stepperDidStep: (CellStepper*) sender
UITableViewCell *cell = sender.cell;
//...
【讨论】:
以上是关于iOS7:来自其子视图之一的 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章