【问题标题】:Delegating UIScrollView doesn't work - help needed!委派 UIScrollView 不起作用 - 需要帮助!
【发布时间】:2009-10-25 04:18:10
【问题描述】:

因为简单的任务变成了地狱,我严重掉头发。所以我有 UIScrollView 子类 - MyScrollView 和 UIViewController 子类 StoryViewController 使用该滚动视图。我需要知道滚动何时滚动,我该怎么办?我尝试委派!

// StoryViewController.h
@interface StoryViewController : UIViewController <UIScrollViewDelegate>

// StoryViewController.m
// init
scrollView  = [[MyScrollView alloc] init];
scrollView.delegate = self;

// delegated function
- (void)scrollViewDidScroll:(UIScrollView *)s {
    NSLog(@"TEST");
}

编辑:一些 NSLogs

Self: <StoryViewController: 0xfce090>
ScrollView Delegate: <StoryViewController: 0xfce090>
WebView Delegate: <StoryViewController: 0xfb1a30>

Edit:UIWebView 子类 (MyWebView) 是 MyScrollView 的子视图,并且 (void)webViewDidFinishLoad:(UIWebView*)webView (在同一个 storyviewcontroller.m 中) 打印消息。

没有错误,构建良好,运行良好。滚动后 - 什么都没有打印出来。

我做错了什么?

【问题讨论】:

    标签: iphone cocoa-touch delegates uiscrollview


    【解决方案1】:

    这可能是一个红鲱鱼,但您调用的是 alloc 和 init,而不是 alloc 和 initWithFrame:。我假设您在 viewDidLoad 方法中添加了滚动视图?这是基于 XIB 的控制器吗?您是否尝试过在 XIB 文件中添加滚动视图并在那里进行设置?您是否尝试过添加其他委托方法?

    【讨论】:

    • 我应该使用 initWithFrame 而不是只使用 init 吗?我真的不知道这一点,我认为使用“init”并稍后设置框架是正常的。 MyScrollView 没有视图控制器,所以不是 XIB 基础(我对 IB 非常糟糕,所以我尝试以编程方式做所有我能做的事情)。其他委托方法也不起作用。而且我的头疼得要死,这应该是一件容易的事......
    • MyScrollView 的子视图 UIWebView 是否有可能以某种方式拦截和搞砸一切?我该如何测试呢?
    • initWithFrame:是视图的指定初始化器;你应该从你自己的init中调用它,如果你没有覆盖init,直接调用它。如果您的 UIWebView 是 UIScrollView 的子项,则很有可能它正在获取您的事件。最简单的尝试是将 UIWebView 替换为 UIImageView 中的固定 UIImage。 UIWebView 处理自己的滚动;您将很难以这种方式与之交互。
    【解决方案2】:

    您确定scrollView 实际上是显示的滚动视图吗?我能想到的几件事我会按绝望的顺序检查:

    1. 在 self.view 加载后检查我是否真的将 scrollView 添加到 self.view
    2. 检查当我将 scrollView 添加到 self.view 时,它与我分配委托时拥有的对象相同
    3. 当我添加 scrollView 时检查 scrollView 的委托仍设置为视图控制器
    4. 在分配委托时检查 self 实际上是否设置为视图控制器
    5. 尝试使用常规 UIScrollView 看看是否有任何变化

    【讨论】:

    • 谢谢,您的信息很有用,我已经尝试了所有方法以及更多方法,但仍然没有运气。即使我将 UIScrollView 委托给 MyScrollView - 也没有任何反应。也许委托函数有问题?它们可能无法访问吗?
    • 为了清楚起见,您是否尝试过将 MyScrollView 替换为 UIScrollView?根据您上面的代码,没有理由认为委托不应该工作,所以它在其他地方已经坏了。
    • 是的,我试过原来的 UIScrollView - 没有帮助。而且它看起来像 scrollView.contentSize 和 .contentOffset 保持零。天哪,我在这里做了什么..
    • MyScrollView 的子视图 UIWebView 是否有可能以某种方式拦截和搞砸一切?我该如何测试呢?
    • 不好意思,UIWebView怎么是自己类的子视图? UIWebView 甚至不是 UIScrollView 的子类,它更像是一个兄弟类,两者都有内部管理滚动的 UIScroller 对象。
    【解决方案3】:

    因此,愚蠢奖再次授予 sniurkst。实际上是 UIWebView 被错误地添加到 UIScrollView 中,所以对我来说这是“天哪,我的滚动视图正在工作”,而它仍然是 UIWebView 自己滚动。

    对不起,我的愚蠢。谢谢大家的帮助,下次我会添加更多的代码示例,这样你就可以看到发生了什么并嘲笑我的错误:)

    如果有人能指点我一个例子,如何正确使用带有 WebView 的 ScrollView,以便 ScrollView 负责所有的滚动,我将非常感激。

    【讨论】:

    • 对不起,没有办法做到这一点。 WebViews 处理它们自己的滚动。您也许可以使用固定大小的 UIWebView 并禁用其 userInteractionEnabled 标志。当然,然后定期触摸它是行不通的。我会推荐一种不同的方法。
    • 好吧,这很可悲,因为我需要带有 css/js 和链接的 WebViews 富文本,而且我还需要知道它的滚动偏移量和滚动时间......谢谢您的回复,也许我会想办法的。
    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多