在UITableViewCell中设置ScrollView的委托的正确方法

时间:2016-05-22 05:07:20

标签: ios objective-c iphone uitableview delegates

我有一个自定义UITableView单元格作为xib。

我已经在里面看了一个滚动视图。

我知道如何设置代表,但我有困惑。他们是两个这样做。

我不知道哪个是最好的,如何确定我必须选择哪种方式。

  

1种方式:设置委托给文件所有者

enter image description here

  

2路:将委托设置为UITableViewCell

enter image description here

2 个答案:

答案 0 :(得分:0)

在tableviewcell中,scrollview的委托将始终设置为UITableViewCell

这意味着你的第二步将起作用。 如果您发现任何困难,请告诉我。

答案 1 :(得分:0)

选择取决于内部滚动视图的委托函数必须执行的操作。将委托指向自定义单元格并在那里处理内部滚动事件更简单。

但是如果处理内部滚动需要来自视图控制器的大量数据和逻辑,那么将委托指向vc。为了完成这项工作,我们需要知道滚动事件来自内部滚动视图,而不是表格,我们可能需要滚动发生的行,所以:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    // if the table view's delegate points here (likely), then to distinguish...
    if (scrollView != self.tableView) {
        // one of the scroll views in the table, but which one?
        NSIndexPath = [self indexPathContainingView:scrollView];
        // here we know that horizontal scrolling happened on indexPath.row
    }
}

// return the indexPath of the tableView cell containing a view
- (NSIndexPath *)indexPathContainingView:(UIView *)view {
    while(view && ![view isKindOfClass:[UITableViewCell self]])
        view = view.superview;
    return [self.tableView indexPathForCell:(UITableViewCell *)view];
}