2014-11-03 2 views
0

Чтобы обобщить мое приложение, это похоже на iBook: у меня есть несколько страниц, заполненных XML-файлом (текст и изображение). Как и в приложении iBook, я хочу использовать UISlider для выбора и изменения страницы.Как изменить страницу с UISlider из UIView

Я использую UIViewController (appViewController) в качестве Контенер различных UIViews (contentViewController)

заголовок AppViewController:

#import <UIKit/UIKit.h> 
#import "contentViewController.h" 

@interface AppViewController : UIViewController <UIPageViewControllerDataSource> 
{ 
    UIPageViewController *pageController; 
    NSArray *pageContent; 
    NSDictionary *pageFields; 
} 

в AppViewController.m, у меня есть:

// Create a new view controller and pass suitable data. 
    contentViewController *dataViewController = [[contentViewController alloc]initWithNibName:@"contentViewController" bundle:nil]; 

Заголовком ContentViewController является:

#import <UIKit/UIKit.h> 

@class DCIEquipment; 

@interface contentViewController : UIViewController 

@property (nonatomic,strong) DCIEquipment *eqt; 

@property (assign, nonatomic) NSUInteger pageIndex; 
@property (assign, nonatomic) NSUInteger pageNumber; 

@property (strong, nonatomic) IBOutlet UISlider *pageSlider; 

@end 

Поскольку в iBook слайдер, похоже, следит за движением керлинга страницы, я помещаю свой UISlider в contentViewController. Все работает хорошо с UISlider, но я не знаю, как это сделать, чтобы сообщить UIViewController об изменении страницы (я предположил, что код изменения страницы должен быть выполнен в этом контроллере).

Скажите, пожалуйста, если вам нужен еще код. Надеюсь, что объяснения ясны. Я просто хочу знать, куда положить UISlider (представление) и как отправить значение на pageViewController.

Заранее спасибо.

Рафаэль

ответ

0

Используйте protocols. Есть много примеров. И вы используете хотя бы один из них (UIPageViewControllerDataSource).

Просто создать для вашего contentViewController (в его заголовке файла)

@class ContentViewController; // this is fast-forward declaration 
@protocol ContentViewControllerDelegate 

- (void)contentViewController:(ContentViewController *)controller didChangePage:(NSUInteger)pageIndex; 

@end 

@interface ContentViewController : UIViewController 
// ... 
@property (weak,nonatomic) id<ContentViewControllerDelegate> delegate; // don't forget to set the value with your appViewController 
// ... 
@end 

В файле ContentViewController-реализации в какой-то метод просто вызвать метод делегата

if (self.delegate && [self.delegate respondsToSelector:@selector(contentViewController:didChangePage:)]) 
    [self.delegate contentViewController:self didChangePage:newIndex]; 

И не забывайте реализовать этот метод в классе appViewController.

+0

Я не уверен, что хорошо понимаю: для свойства 'delegate' вы говорите мне, что мне не нужно забывать устанавливать значение с помощью моего appViewController. Как мне это сделать ? Я попробовал с 'self.delegate = [super parentViewController];', но у меня есть несовместимая ошибка типа. Моревет, я предполагаю, что метод 'didChangePage:' должен быть реализован и в моем файле contentViewController-реализация, нет? – Oby1

+0

@ Oby1 yep, вы должны добавить в протокол заголовков 'appViewController' и реализовать внутри него метод' didChangePage: '. – Astoria

+0

Мне нужно несколько раз, чтобы понять, что свойство делегата должно быть установлено в appViewController.m! Более того, я изменяю 'id' на' NSObject' для свойства делегата, чтобы избежать ** «Неизвестный метод экземпляра для selector» отвечаетToSelector: '** ошибка для 'if (self.delegate && [self.delegate отвечаетSoSelector: @ селектор (contentViewController: didChangePage :)]) '. Это может помочь кому-то узнать; o) Спасибо за помощь и быстрый ответ: o) – Oby1

Смежные вопросы