【问题标题】: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 发送等效消息或其他消息。不过,在实际执行此操作之前,我会三思而后行……我会尝试让一个对象(视图控制器)负责与表相关的所有事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2012-08-21
    • 2016-03-23
    • 2011-08-22
    • 2010-11-12
    相关资源
    最近更新 更多