【问题标题】:iOS7: UITableViewCell from one of its subviewsiOS7:来自其子视图之一的 UITableViewCell
【发布时间】: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 中从步进器获取单元格的最佳方法是什么?

谢谢

尼古拉

【问题讨论】:

    标签: uitableview ios7


    【解决方案1】:

    为什么不在data-source方法cellForRowAtIndexPath中将UISteppertag设置为与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;
         //...
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多