将 UIScrollView 连接到 UIView 类

Posted

技术标签:

【中文标题】将 UIScrollView 连接到 UIView 类【英文标题】:Connecting a UIScrollView to a UIView class 【发布时间】:2015-06-16 11:46:18 【问题描述】:

我目前正在创建用户可以滚动浏览的图片“幻灯片”。按照指南,我这样做是为了让我使用的 UIScrollView 在用户滚动时显示上一张和下一张图片的边缘。这会带来一个副作用,即如果用户触摸图片的边缘之一,他将无法滚动,因为这些边缘在技术上不在 UIScrollView 本身的边界内。为了弥补这一点,我将创建一个 UIView,我将在其中嵌入 UIScrollView。 UIVew 将扩展页面的整个宽度,以便用户在触摸图片边缘时可以滚动。为此,我需要通过 IBOutlet 将 UIScrollView 连接到 UIView 的代码。通常这只是简单地通过按住 Ctrl 键单击 UIScrollView 并拖动到代码来完成。但是,这似乎对我不起作用,我不知道为什么。

这是我尝试 ctrl-单击 UIScrollView 并拖动到代码以创建 IBOutlet 时正在处理的环境的屏幕截图(它根本没有提供创建任何东西的选项)。

这是运行模拟器产生的屏幕截图。如果我尝试单击并拖动鼠标当前所在的位置,它不会滚动,这是我要纠正的问题。

【问题讨论】:

您应该在自己的 .xib 中创建自定义控件,完成控件需要执行的所有操作,然后将其作为单个控件一次性添加到 .storyboard 中。就我而言,在这样的情节提要中设置自定义 UIView 子类有点愚蠢...... 原来我只需要从 UIView 的“出口”部分拖到 UIScrollView (由于某种原因从 UIScrollView 拖到 UIView 的代码不起作用)跨度> 【参考方案1】:

这是因为您应该将情节提要视图链接到 UIView 类。您可以在自定义课程设置中选择您的 ScrollViewController 课程。我添加了示例 jpg

【讨论】:

我赞成这一点,因为它在技术上似乎是正确的......但对你和提问者来说,我不得不建议不要以这种方式这样做。应该在单独的 .xib 中创建视图及其所有子视图,然后一旦完成,它应该作为单个控件添加到 .storyboard...【参考方案2】:

通过将两者连接起来,您正在寻找的并不是那么“简单”。

有两种选择:

1) 将来你应该使用 UICollectionView 并自己实现分页行为,这是我认为最干净的代码。

别介意第二个选项 - 我没有看到你实际上已经使用了这个 2)直接回答你的问题:

您必须像这样子类化包含 UIScrollView 的 UIView:

标题:

#import <UIKit/UIKit.h>

@interface SCTouchForwardView : UIView

@property (nonatomic, weak) IBOutlet UIView* receiver;
@property (nonatomic, assign) BOOL force;

@end

实施:

#import "SCTouchForwardView.h"

@implementation SCTouchForwardView

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

    UIView* result = [super hitTest:point withEvent:event];
    if (![result isKindOfClass:[SCTouchForwardView class]]) 
        return result;
    
    if (result==self) 
        UIView *result = [self.receiver hitTest:[self convertPoint:point toView:self.receiver] withEvent:event];
        if (result) 
            return result;
        else
            if (self.force) 
                return self.receiver;
            
            return nil;
        
    
    return nil;


@end

当您想使用它时,您只需从容器中右键单击并拖动到 UIScrollview 并选择“接收器”,您尝试做的事情就会奏效!

【讨论】:

以上是关于将 UIScrollView 连接到 UIView 类的主要内容,如果未能解决你的问题,请参考以下文章

让 2 个不同的 UIView 确定 UIScrollView 的 contentView 的高度

将 UITapGestureRecognizer 连接到 UIView

如何将 UIView 插座连接到自定义子视图

将 UIView 添加到 ScrollView 以进行分页

不知道如何使用 Swift 将 UIView 类连接到 IB 中的视图

为啥 UIScrollView 委托无法连接到自身?