代表不会被调用

时间:2013-01-12 08:07:44

标签: objective-c delegates

我有一个UIPageViewController我在RootViewController的viewDidLoad方法中设置如下:

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

成功调用委托pageViewControllerspineLocationForInterfaceOrientation,我可以相应地设置主干。

但是,我想在按钮上单击设置PageViewController,所以我将代码移动到按下按钮事件的事件处理程序。现在没有调用委托。

我有什么想法可以解决它?

1 个答案:

答案 0 :(得分:1)

这有些复杂但可以通过以下代码实现:

步骤1:将以下代码添加到rootViewController的.h文件中。

@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 init调用之后

如果你发现pageViewController隐藏了添加的按钮,只需使用-viewDidLoad方法旁边的代码将它们带到前面

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