2010-03-18 89 views
2

我有一個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),但滾動器從不移動到其他選項卡。

在此先感謝!

回答

1

當然,您應該只使用滾動視圖的一個實例。它會正常工作,沒有任何麻煩。使用方法setGallery:像你這樣,只要確保你把你的singleScrollerForAll視圖來查看當前控制器的setGallery方法:

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

,並呼籲:

[firstView setGallery:singleScrollerForAll]; 

[secondView setGallery:singleScrollerForAll]; 

和不需要在其他兩個控制器中做任何事情,因爲當你調用addSubview時:子視圖將自動從先前的超級視圖中移除。

+0

Vladimir - 非常感謝您的見解。這是完美的。 您的肯定讓我更深入地研究它,發現我的實現在將每個UIScrollView分配爲IBOutlet時存在缺陷。儘管我試圖移動指針,但IBOutlet連接仍然存在,這是徒勞的。 一旦我從腦海中解脫出來並使用addSubView,生活就很好。 – Devunwired 2010-03-18 19:06:07

相關問題