繁体   English   中英

在其中一个控制器上按下按钮时,更改页面视图控制器中的视图

[英]Change view in a page view controller when button is pressed in one of the controllers

我有一个UIPageViewController连接到三个视图控制器

每个UIViewController都有三个类

当按下“拍摄照片”按钮时,第三个视图应滑入视图。 当按下“从库中选择”时,第一个视图控制器应滑入视图。

我有3个类控制每个UIViewController ,一个类控制情节提要中的页面。 这是pageViewController.m

@implementation pageViewController

{
NSArray *myViewControllers;
}

- (void)viewDidLoad {
  [super viewDidLoad];    

  self.delegate = self;
  self.dataSource = self;

  UIViewController *p1 = [self.storyboard instantiateViewControllerWithIdentifier:@"one"];
  UIViewController *p2 = [self.storyboard instantiateViewControllerWithIdentifier:@"two"];
  UIViewController *p3 = [self.storyboard instantiateViewControllerWithIdentifier:@"three"];


  myViewControllers = @[p1, p2, p3];
  pageTwoViewController *ptvc = [[pageTwoViewController alloc] init];
  ptvc.publicViewControllers = myViewControllers;

  [self setViewControllers:@[p2] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

该应用程序已经过编程,可以在向左或向右滑动时切换视图。

我已经将按钮链接到他们的尊敬的班级,但是我不知道如何通过按钮切换可见的视图控制器。 在第二个视图控制器上按下一个按钮时,如何更改可见的UIViewController

再次调用“ setViewControllers”以切换到其他视图控制器。 因此,例如,如果您想移至“ p1”,请使用如下所示的内容:

// grab a reference out of your existing NSArray
UIViewController *newVC = self.myViewControllers[0];
[self setViewControllers:@[newVC] direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil];

使用“ animated:YES”将产生与用户手动导航相同的幻灯片。 根据您向前还是向后跳来调整“方向”。

要在子视图控制器与其父视图控制器之间进行通信,请使用委托。 首先,在父视图控制器的标头中声明一个委托,例如:

@protocol PhotoSourceDelegate <NSObject>
  - (void)takePhoto;
  - (void)chooseFromLibrary;
@end

更新您的父视图控制器以实现此委托:

@interface pageViewController : UIPageViewController <PhotoSourceDelegate>
@end

@implementation pageViewController
...
#pragma mark - PhotoSourceDelegate
- (void)takePhoto {
  // call "setViewController" to display "take photo" view controller;
}

- (void)chooseFromLibrary {
  // call "setViewController" to display "choose from library" view controller;
}

在显示“拍摄照片”和“从库中选择”按钮(p2?)的视图控制器的标题内,添加一个属性以保存对委托的引用:

@property(nonatomic, weak) id<PhotoSourceDelegate> delegate;

实例化此控制器时,请确保设置其委托:

UIViewController *p2 = [self.storyboard instantiateViewControllerWithIdentifier:@"two"];
p2.delegate = self;

最后,在同一视图控制器中,当按下“拍摄照片”按钮时,像这样调用委托:

if (self.delegate != nil) {
  [self.delegate takePhoto];
}

当您按下“从库中选择”按钮时,请像下面这样调用委托:

if (self.delegate != nil) {
  [self.delegate chooseFromLibrary];
}

委托的使用在iOS中非常普遍,因此如果/当您准备好更好地理解时,快速搜索会发现很多教程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM