首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS7:从其子视图中提取的UITableViewCell

iOS7:从其子视图中提取的UITableViewCell
EN

Stack Overflow用户
提问于 2013-10-02 10:29:32
回答 3查看 446关注 0票数 3

我有一个UITableViewCell,上面有一个UIStepper。当步骤值改变时,它会触发一个方法:

代码语言:javascript
复制
-(void) stepperDidStep: (UIStepper*) sender

我需要从寄件人那里得到UITableViewCell。

直到iOS7,此代码才能正常工作:

代码语言:javascript
复制
-(void) stepperDidStep: (UIStepper*) sender
{
 UITableViewCell *cell = (UITableViewCell*) sender.superview.superview;
 //...
}

现在,在iOS7+Autolayout中我得到了这样的信息:

代码语言:javascript
复制
UITableViewCell *cell = (UITableViewCell*) sender.superview; 

细胞是UITableViewCellContentView

代码语言:javascript
复制
UITableViewCell *cell = (UITableViewCell*) sender.superview.superview;

细胞是UITableViewCellScrollView (?)

问:在iOS7中,从步骤中获取细胞的最佳方法是什么?

谢谢

尼古拉

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-02 15:09:16

为什么不直接将UIStepperindexPath.Row设置为data-source方法cellForRowAtIndexPath中的indexPath.Row

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

代码语言:javascript
复制
-(void) stepperDidStep: (UIStepper*) sender{

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

Stack Overflow用户

发布于 2013-10-02 15:07:23

尝尝这个。我没有测试它,但是我使用类似的代码来找到视图的视图控制器

代码语言:javascript
复制
- (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
EN

Stack Overflow用户

发布于 2013-10-02 14:56:33

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

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

类似于:

代码语言:javascript
复制
@interface CellStepper : UIStepper
@property (nonatomic, weak) UITableViewCell* cell;
@end

代码语言:javascript
复制
-(void) stepperDidStep: (CellStepper*) sender
{
 UITableViewCell *cell = sender.cell;
 //...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19134870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档