2013-01-12 57 views
1

我有一個UIPageViewController我設置在RootViewController的的viewDidLoad方法如下:代表不會被調用

[self addChildViewController:self.pageViewController]; 
[self.view addSubview:self.pageViewController.view]; 

委託pageViewControllerspineLocationForInterfaceOrientation調用成功,我可以設置相應的脊柱。

但是,我想設置一個按鈕單擊PageViewController,所以我將代碼移動到按鈕按下事件的事件處理程序。現在代理不被調用。

任何想法如何解決它?

+0

的詳細原因將是很有益只是把他們帶到面前。按鈕是如何創建的?你是否知道當你點擊按鈕時調用該方法的事實?按鈕位於何處? –

+0

我使用故事板在rootview控制器中創建了按鈕,並驗證通過在那裏設置斷點來調用該方法。 – vishwa

+0

我想我知道這裏發生了什麼。由於代表與方向改變事件有關。單擊按鈕時,方向已經設置並且不會更改,因此不會調用委託。我需要找到一種方法,在沒有這個委託的情況下完成同樣的事情。 – vishwa

回答

1

這是一些什麼複雜的,但可以通過下面的代碼來實現:

第1步:添加以下代碼的.h RootViewController的文件。

@property (strong, nonatomic) IBOutlet UIButton *previousClick; 
@property (strong, nonatomic) IBOutlet UIButton *nextClick; 

第2步:將它們連接到您使用的xib或故事板。

enter image description here

第3步:添加兩個IBAction爲方法,以.m文件。

#pragma mark - IBAction Methods 

- (IBAction)previousClick:(id)sender 
{ 
    [_modelController pageViewController:self.pageViewController viewControllerBeforeViewController:_dataViewController]; 
} 


- (IBAction)nextClick:(id)sender 
{ 
    [_modelController pageViewController:self.pageViewController viewControllerAfterViewController:_dataViewController]; 
} 

第4步:您還需要下面放線太.m文件

@interface RootViewController() 
@property (readonly, strong, nonatomic) ModelController *modelController; 
@property (readonly, strong, nonatomic) DataViewController *dataViewController; 
@end 

和綜合它們如下

@synthesize modelController = _modelController; 
@synthesize dataViewController = _dataViewController; 

第5步:最後,也是最後添加下面一行到- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation方法。

_dataViewController = currentViewController; 

的currentViewController的ALLOC初始化調用之後。

如果您發現添加按鈕由pageViewController隱藏使用下面的代碼在側-viewDidLoad方法

[self.view bringSubviewToFront:self.previousClick]; 
[self.view bringSubviewToFront:self.nextClick];