2014-11-03 37 views
0

总结我的应用程序,它就像一个iBook:我用xml文件(文本和图像)填充了多个页面。 就像在iBook应用程序中,我想使用UISlider来选择和更改页面。如何使用UISlider从UIView更改页面

我使用一个UIViewController(appViewController)作为不同的UIViews contener(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发送值。

预先感谢您。

Raphael

回答

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

我不太清楚:对于属性'委托',你告诉我,我不必忘记用我的appViewController设置值。我该怎么做呢 ?我尝试'self.delegate = [super parentViewController];'但我有一个不兼容的类型错误。 Moreovet,我假设'didChangePage:'方法也必须在我的contentViewController-implement文件中实现,不是吗? – Oby1 2014-11-03 22:33:52

+0

@Oby1是的,你应该在'appViewController'头文件中添加协议并在其中实现'didChangePage:'方法。 – Astoria 2014-11-04 09:16:11

+0

我需要一些时间来理解委托属性必须在appViewController.m中设置!此外,我更改了'NSObject'的委托属性,以避免**'没有已知实例方法的选择器'respondsToSelector:'**错误'if(self.delegate && [self.delegate respondsToSelector:@选择器(contentViewController:didChangePage :)])'。它可以帮助一些人知道; o)感谢您的帮助和快速回答:o) – Oby1 2014-11-05 23:07:01