gpt4 book ai didi

ios - UIScrollView 不滚动的自定义 UIView 小部件

转载 作者:行者123 更新时间:2023-11-29 03:20:13 26 4
gpt4 key购买 nike

我正在尝试开发一个新的自定义 UIView(以允许水平日期选择)。我想在 XIB 文件中进行所有 UI 设计。

自定义 UI View 包含一个 ScrollView ,然后是两个“周” View 。我的想法是,当滚动发生时,我会将两个“周” View 移动到位并将它们重新配置到正确的日期,以创建一个“无限”滚动以供日期选择。

我可以加载 UIView,然后加载 ScrollView 和周 View (全部在 XIB 中设计)。

我的 DatePickerView 类派生自 UIView 类,它执行 ScrollView (包含两周 View )的 addSubview。 ScrollView 为 320 宽,contentSize 设置为 640 宽。用户交互已启用。水平滚动已启用。

这一切都有效并显示在屏幕上。每个周 View 包含 7 个按钮。我可以按下它们,它们就能触摸到。然而, ScrollView 似乎并不想滚动。

我将自定义 View 设置为 UIScrollViewDelegate。没有调用 scrollViewDidScroll

对于每个周 View ,我都有一个“容器” View ,然后是按钮。我将以下内容添加到容器 View (同样派生自 UIView)。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
DDLogInfo(@"Began. Next Responder: %@", self.nextResponder);
[self.nextResponder touchesBegan:touches withEvent:event];
}

(以及其他触摸事件的类似事件,touchesMoved、touchesEnded、touchesCancelled),

我打印出 nextResponder,它是 UIScrollView,所以我知道我正在将触摸发送到 View ,但我从未看到 scrollview 想要滚动。

我将 touchEvents 向上传递到响应链的方法是否正确?
我还需要配置什么才能让滚动正常工作吗?

感谢任何帮助。

查理

最佳答案

如果我没理解错的话,您想要的是只有三页 ScrollView 的无限滚动。我在我的日历 View 项目中实现了类似的效果。您可以从这里结帐 DPCalendar

简而言之,我创建了一个像

这样的 View
@interface DPCalendarMonthlyView : UIScrollView

然后像这样开始

self.showsHorizontalScrollIndicator = NO;
self.clipsToBounds = YES;
self.contentInset = UIEdgeInsetsZero;
self.pagingEnabled = YES;
self.delegate = self;

我创建了三个这样的 View

[self.pagingViews addObject:[self singleMonthViewInFrame:self.bounds]];
[self.pagingViews addObject:[self singleMonthViewInFrame:CGRectMake(self.bounds.size.width, 0, self.bounds.size.width, self.bounds.size.height)]];
[self.pagingViews addObject:[self singleMonthViewInFrame:CGRectMake(self.bounds.size.width * 2, 0, self.bounds.size.width, self.bounds.size.height)]];

然后我设置内容大小并将其滚动到中间

[self setContentSize:CGSizeMake(self.bounds.size.width * 3, self.bounds.size.height)];
[self scrollRectToVisible:((UIView *)[self.pagingViews objectAtIndex:1]).frame animated:NO];

在scrollview委托(delegate)函数中,我需要做

- (void)scrollViewDidEndDecelerating:(UIScrollView *)sender
{
//If scroll right
if(self.contentOffset.x > self.frame.size.width)
{
//do something if scroll right
} else if(self.contentOffset.x < self.frame.size.width)
{
//do something else if scroll left
} else {
return;
}
//scroll back to the middle
[self scrollRectToVisible:((UICollectionView *)[self.pagingViews objectAtIndex:1]).frame animated:NO];
}

希望对你有用。

关于ios - UIScrollView 不滚动的自定义 UIView 小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21196606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com