У меня есть UIScrollView, в котором находится галерея изображений, которую пользователь может прокрутить. Это представление должно быть видимым на каждом из трех отдельных UIViewControllers, которые размещаются внутри UITabBarController. Прямо сейчас у меня есть три отдельных экземпляра UIScrollView в подклассе UITabBarController, и контроллер управляет тем, что три синхронизированы (когда пользователь прокручивает тот, который они видят, программно прокручивая два других, чтобы они совпадали, и т. Д.), Что не идеально.Обмен UIView между UIViewControllers в UITabBarController
Я хотел бы знать, есть ли способ работать только с одним экземпляром 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:nil
на текущем и setGallery:scrollerOne
на каждый раз при каждом изменении), но скроллер никогда не перемещался на другие вкладки.
Заранее благодарен!
Vladimir - Большое спасибо за понимание. Это работает отлично. Ваше утверждение заставило меня изучить его более глубоко, чтобы обнаружить, что моя реализация была ошибочной в назначении каждого UIScrollView как IBOutlet. Несмотря на то, что я пытался перемещать указатели, с подключением IBOutlet все еще на месте, это было бесполезно. Как только я получил это из головы и использовал addSubView, жизнь была хорошей. – Devunwired