我有一個UIScrollView,它包含用戶可以滾動瀏覽的圖像庫。這個視圖需要在UITabBarController中的三個單獨UIViewController的每一個上可見。現在,我在UITabBarController子類中有三個單獨的UIScrollView實例,並且控制器管理保持三個同步(當用戶滾動他們可以看到的那個,以編程方式滾動另外兩個以匹配等等),這不是理想的。在UITabBarController中的UIViewControllers之間共享UIView
我想知道是否有與只有一個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得到通知(如滾動視圖的委託),當用戶滾動其中一個實例,然後調用像scrollToMatch:
這樣的方法將其他兩個與用戶的選擇同步。
有什麼可以做,使用IBOutlet或類似的多對一的關係,將其縮小到一個實例,所以我不必管理三個滾動視圖?我嘗試保留一個實例,並使用UITabBarControllerDelegate方法將指針從一個視圖移動到下一個視圖(每次更改時在當前和setGallery:scrollerOne
上調用setGallery:nil
),但滾動器從不移動到其他選項卡。
在此先感謝!
Vladimir - 非常感謝您的見解。這是完美的。 您的肯定讓我更深入地研究它,發現我的實現在將每個UIScrollView分配爲IBOutlet時存在缺陷。儘管我試圖移動指針,但IBOutlet連接仍然存在,這是徒勞的。 一旦我從腦海中解脫出來並使用addSubView,生活就很好。 – Devunwired 2010-03-18 19:06:07