将 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