gpt4 book ai didi

iphone - 在 UITabBarController 中的 UIViewController 之间共享 UIView

转载 作者:行者123 更新时间:2023-12-03 21:23:44 24 4
gpt4 key购买 nike

我有一个 UIScrollView,其中包含用户可以滚动浏览的图像库。此 View 需要在 UITabBarController 内的三个单独的 UIViewController 中的每一个上可见。现在,我在 UITabBarController 子类中有三个独立的 UIScrollView 实例,并且 Controller 管理保持三个同步(当用户滚动他们可以看到的一个时,以编程方式滚动其他两个以匹配等),这并不理想。

我想知道是否有一种方法可以只使用 UIScrollView 的一个实例,但让它只显示在用户当前正在与之交互的 UIViewController 中。这将完全消除所有同步代码。这基本上是我现在在 UITabBarController 中的内容(这是当前管理所有这些的地方):

@interface ScrollerTabBarController : UITabBarController {
FirstViewController *firstView;
SecondViewController *secondView;
ThirdViewController *thirdView;

UIScrollView *scrollerOne;
UIScrollView *scrollerTwo;
UIScrollView *scrollerThree;
}
@property (nonatomic,retain) IBOutlet FirstViewController *firstView;
@property (nonatomic,retain) IBOutlet SecondViewController *secondView;
@property (nonatomic,retain) IBOutlet ThirdViewController *thirdView;
@property (nonatomic,retain) IBOutlet UIScrollView *scrollerOne;
@property (nonatomic,retain) IBOutlet UIScrollView *scrollerTwo;
@property (nonatomic,retain) IBOutlet UIScrollView *scrollerThree;

@end

@implementation ScrollerTabBarController

- (void)layoutScroller:(UIScrollView *)scroller {}
- (void)scrollToMatch:(UIScrollView *)scroller {}

- (void)viewDidLoad {
[self layoutScroller:scrollerOne];
[self layoutScroller:scrollerTwo];
[self layoutScroller:scrollerThree];

[scrollerOne setDelegate:self];
[scrollerTwo setDelegate:self];
[scrollerThree setDelegate:self];

[firstView setGallery:scrollerOne];
[secondView setGallery:scrollerTwo];
[thirdView setGallery:scrollerThree];
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self scrollToMatch:scrollView];
}

@end

当用户滚动其中一个实例时,UITabBarController 会收到通知(作为 ScrollView 的委托(delegate)),然后调用 scrollToMatch: 等方法将其他两个实例与用户的选择同步。

是否可以使用 IBOutlet 上的多对一关系或类似的方式来将其范围缩小到一个实例,这样我就不必管理三个 ScrollView ?我尝试保留单个实例,并使用 UITabBarControllerDelegate 方法将指针从一个 View 移动到下一个 View (在当前 View 上调用 setGallery:nil ,在下一个 View 上调用 setGallery:scrollerOne )时间改变),但滚动条从未移动到其他选项卡。

提前致谢!

最佳答案

当然,您应该只使用 ScrollView 的一个实例。而且它会正常工作,没有任何麻烦。使用方法 setGallery:就像您所做的那样,只需确保将 singleScrollerForAll View 添加到 setGallery 方法中当前 Controller 的 View 即可:

-(void)setGallery:(UIView *)aScrollerView{
[self.view addSubview:aScrollerView];
}

并调用:

[firstView setGallery:singleScrollerForAll];

[secondView setGallery:singleScrollerForAll];

并且无需在其他两个 Controller 中执行任何操作,因为当您调用 addSubview: 时, subview 将自动从先前的 super View 中删除。

关于iphone - 在 UITabBarController 中的 UIViewController 之间共享 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2470205/

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