Приложение для iPad на данный момент построено так: данные XML извлекаются с моего веб-сайта и анализируются в контроллере представления «FishIDView». Этот контроллер представления имеет UIScrollView «scrollView», который имеет подпредставление «XMLView», которое является UIView. scrollView настроен так, что он прокручивает и просматривает XMLViews на основе количества элементов, содержащихся в XML. Например, 12 элементов = 12 страниц или экземпляры XMLView. Эти страницы содержат фотографии отдельных рыб. Каждая из этих страниц содержит кнопку, которая создает подпредставление UIView «XMLView», называемое «flipView», и отображает подпредставление с помощью анимированного перехода с переворотом влево. Это подпредставление содержит информацию об изображенной рыбе. У flipView есть кнопка, которая возвращает пользователя (переворачивает назад) к изображению рыбы.
Моя проблема в том, что когда я смотрю на flipView (который является подпредставлением XMLView, который является подпредставлением scrollView), прокрутка все еще включена. Если я прокручиваю влево или вправо в режиме flipView, я вижу XMLView следующей рыбы. Я хочу, чтобы при просмотре flipView была отключена прокрутка.
Любые предложения о том, что я могу сделать, чтобы отправить что-то вроде команды setScrollEnabled: NO в scrollView (на FishIDView) из подпредставления?
EDIT:
Так что я предполагаю, что мне нужно использовать протокол и делегировать. Я думал, что смогу это выяснить, но я увлекся реализацией.
В моем XMLView.h (без постороннего кода):
@protocol XMLViewDelegate <NSObject>
- (void) stopScrolling;
@end
@interface XMLView : UIView
{
...
id secondDelegate;
}
...
@property (nonatomic, retain) id <XMLViewDelegate> secondDelegate;
...
@end
Затем в моем XMLView.m (с подключенной IBAction к кнопке UIB, которая работает правильно):
...
@synthesize secondDelegate;
...
-(IBAction)goToInfo
{
//[self newPage];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self cache:YES];
[self.secondDelegate stopScrolling];
[self addSubview:flipView];
...
NSLog(@"button pressed");
}
В FishIDView.h:
@interface FishIDView : UIViewController <XMLViewDelegate>
FishIDView.m:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[scrollView setScrollEnabled:YES];
XMLView *subsubView = [[XMLView alloc] init];
subsubView.secondDelegate = self;
...
}
-(void) stopScrolling
{
[scrollView setScrollEnabled:NO];
NSLog(@"NO more scrolling!!!");
}
Когда я нажимаю на свою кнопку в XMLView, которая вызывает «goToInfo», происходит остальное действие, но журнал «Нет больше прокрутки!» никогда не отображается.
Я поступил неправильно? Я все еще пытаюсь выяснить делегатов, поэтому я могу быть совершенно не прав с этой методологией.
РЕДАКТИРОВАТЬ 2:
Я уже пытался избавиться от делегата и идти по более упрощенному маршруту, но он все еще не работает правильно.
В XMLView.m:
-(IBAction)goToInfo
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self cache:YES];
//The next 2 lines are what I added
ViewController *mainView = [[ViewController alloc] init];
[mainView stopScrolling];
[self addSubview:flipView];
[infoButton setEnabled:FALSE];
[infoButton setHidden:YES];
[title setHidden:YES];
[UIView commitAnimations];
NSLog(@"button pressed");
}
Затем в FishIDView.h
-(void) stopScrolling;
FishIDView.m
-(void) stopScrolling
{
[scrollView setScrollEnabled:NO];
NSLog(@"NO more scrolling!!!");
}
"Нет больше прокрутки!" печать, но scrollView по-прежнему включен прокрутки! Почему он запускает NSLog часть stopScrolling, но не setScrollEnabled: NO? Может кто-нибудь мне помочь?