【问题标题】:getting the container/UIViewController of UIView获取 UIView 的容器/UIViewController
【发布时间】:2012-03-14 20:49:59
【问题描述】:
所以我有一个 UIViewController A,它添加了一个 UIView B 作为子类。 UIView B 有一个 UITableView。我希望 UITableView scrollView 委托位于 UIViewController A 中。我该怎么做?到目前为止,scrollViewDidScroll 委托在这个 UIView 类中。有没有办法让 scrollViewDidScroll 位于 viewController A 内,并在 UIView 中的 UITableView 滚动时调用?
【问题讨论】:
标签:
iphone
objective-c
ios
ipad
【解决方案1】:
将 tableView 设为可从外部访问的属性。比你可以在你的 ViewController A 中这样设置它:
// ClassB.h
@property (nonatomic, readonly) UITableView* tableView;
// In your UIViewControllerA.m
// in loadView: or anywhere else
self.viewB.tableView.delegate = self;
所以结果是:你的 ViewController 是委托。
【解决方案2】:
滚动视图和表格视图是同一个对象——注意 UITableView 是 UIScrollView 的子类。该对象只有一个委托,而不是表格内容和滚动内容的单独委托。还要注意 UITableViewDelegate 采用了 UIScrollViewDelegate。因此,您设置为表委托的对象也将获得 UIScrollViewDelegate 消息。
现在,您的表的委托没有理由不能将有关滚动到其他对象的消息转发。当然,您必须自己设置。因此,当 B 收到 -scrollViewDidScroll: 消息时,它可能会向 A 发送等效消息或其他消息。不过,在实际执行此操作之前,我会三思而后行……我会尝试让一个对象(视图控制器)负责与表相关的所有事情。