【问题标题】:UIScrollView on a UIViewControllerUIViewController 上的 UIScrollView
【发布时间】:2009-11-14 16:26:20
【问题描述】:

我正在处理应用程序的菜单。现在的问题是我无法让 UIScrollView 工作。 UIScrollView 位于 Xib 文件中。 它加载正常,但是当我尝试滚动时它崩溃了。

我认为问题在于我使用了 UIViewController,因为当我将委托而不是自身移除时,它正在工作。现在我得到了:scrollView.delegate = self;

当委托是 appDelegate 时,它​​正在工作,但这不是我想要的。

我在课堂上使用的以下函数:

  • (void)loadScrollViewWithPage:(int)page
  • (void)scrollViewDidScroll:(UIScrollView *)sender
  • (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

我想我有两个选择。使用视图(这可能)或作为 UIScrollview 委托的对象创建 NSObject。

我给出的错误是:

2009-11-14 17:50:25.723 Par23[1240:20b] * -[NSCFType scrollViewDidScroll:]:无法识别的选择器发送到实例 0x4834190
2009-11-14 17:50:25.724 Par23[1240:20b] *
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“***-[NSCFType scrollViewDidScroll:]:无法识别的选择器发送到实例 0x4834190 '

不是功能问题。当我删除函数中的所有代码时,它仍然给出了这个错误

滚动视图有以下设置:
scrollView.pagingEnabled = YES;
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * kNumberOfPages, scrollView.frame.size.height);
scrollView.showsHorizo​​ntalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.scrollsToTop = 否;
scrollView.delegate = self;

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    我在 UIScrollViewDelegte 上遇到了同样的问题。我正在将创建 UIScrollView 的视图控制器设置为该 UIScrollView 的委托,并且我还遇到了上面列出的 unrecognized selector sent to instance 问题。

    在我的视图控制器中,这段代码崩溃了。

        // create the scrollview
        scrollView = [[UIScrollView alloc] initWithFrame:scrollFrame];
    
        // add content view to the scrollView
        scrollView.contentSize = contentFrame.size;
        scrollView.scrollEnabled = YES;
        scrollView.clipsToBounds = YES;
        scrollView.delegate = self;
        [scrollView addSubview:contentView];
    

    我通过子类化 UIScrollView 并将其设为委托来解决此问题。所以现在我的 scrollView 是它自己的代表。这是修改后的代码。

        // create the scrollview
        scrollView = [[PMStickyHeaderScrollView alloc] initWithFrame:scrollFrame];
    
        // add content view to the scrollView
        scrollView.contentSize = contentFrame.size;
        scrollView.scrollEnabled = YES;
        scrollView.clipsToBounds = YES;
        scrollView.delegate = scrollView;  // notice that the scrollView is its own delegate
        [scrollView addSubview:contentView];
    

    这个解决方法对我来说已经足够了。这是我的 scrollView 子类的简单实现。

    @interface PMStickyHeaderScrollView : UIScrollView <UIScrollViewDelegate> 
    @end
    
    @implementation PMStickyHeaderScrollView
    
    - (void)scrollViewDidScroll:(UIScrollView *)sView
    {
        NSLog(@"scrollViewDidScroll %@", [sView description]);
    }
    
    @end
    

    对于它的价值,我认为问题的根本原因是在设置 UIScrollView 的委托时 UIScrollView 对响应者链的处理不正确,但我没有看到任何关于此的错误报告。我正在使用 iPhone 3.0 SDK。其他人都在用什么?对于这个问题还有其他聪明的解决方法吗?

    【讨论】:

    • 我只添加了“scrollView.delegate = scrollView;”成功了,谢谢
    【解决方案2】:

    将 ScrollView 的委托设置为 ViewController 无疑是一种可接受的设计。您需要在模拟器中运行应用程序时打开控制台以查看错误是什么。如果没有错误日志,几乎无法诊断。

    此外,您可能需要考虑将代码发布到您的滚动视图委托函数。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。当我将视图控制器(具有滚动视图)添加到视图后停止释放时,意外修复了它。我不确定为什么会发生这种情况,因为我确信在将视图控制器添加到视图后释放它是正确的做法,因为我没有对它做任何其他事情。

      【讨论】:

      • †他应该作为评论而不是答案发布。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      • 2023-03-28
      • 2017-04-06
      相关资源
      最近更新 更多