我正在使用符合这些协议的自定义UITableView:
此表格视图用于我的应用中的许多地方。我已经在后台实现了图像下载。当用户滚动时,会下载其他图像 - 这就是我需要实现UIScrollViewDelegate方法的原因。我肯定希望在这个类中而不是在视图控制器中使用它,因为每个自定义表视图都使用相同的方法实现。
这是问题所在。在我的视图控制器中,我需要从UITableViewDelegate实现didSelectRowAtIndexPath方法,因为我需要执行一个segue。但是当我这样做(并将委托设置为self)时,UIScrollViewDelegate方法被此视图控制器捕获,并且不会传播到表视图,因为UITableView扩展了UIScrollView(以及他的委托方法)。
我通过将其添加到我的每个视图控制器中来“解决”它:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
[self.bookTableView scrollViewDidEndDragging:scrollView willDecelerate:decelerate];
}
但是在整个应用程序的许多地方都有相同的代码块(仅供参考,其中只有一个,还有一些)并不是很好。你有什么想法我能解决这个问题吗?
答案 0 :(得分:0)
我绝对希望在这个类中而不是在视图控制器中使用它,因为每个自定义表视图都使用相同的方法实现。
不,你没有。 UITableView
是一种观点。它永远不应该与网络通信。这是模型的功能(或可能是模型控制器)。您正在讨论的功能与显示信息无关。它与获取信息有关。
你想要的是滚动视图委托方法到自定义UITableViewController
并从中子类化你的其他表视图控制器。但是,实际下载应由您的模型管理。您的视图控制器应观察模型并在更改时进行更新。
答案 1 :(得分:0)
我已经通过使用iOS 6中的新功能 - 嵌入式视图控制器解决了这个问题。在每个视图控制器中,我正在使用此表视图控制器,我执行此操作:
self.tableViewController.tableView = self.bookTableView;
[self addChildViewController:self.tableViewController];
其中self.bookTableView是我视图中的UITableView。
要从这个孩子TVC执行segue,您可以使用:
[self.parentViewController performSegueWithIdentifier:@"Book Details" sender:selectedBook];