在其中一个控制器中按下按钮时更改页面视图控制器中的视图
Change view in a page view controller when button is pressed in one of the controllers
我有一个 UIPageViewController
连接到三个视图控制器
每个 UIViewController
三个 class
按下 "Take Photo" 按钮时,第三个视图应滑入视图。当 "Choose From Library" 被按下时,第一个视图控制器应该滑入视图。
我有 3 个 classes 控制每个 UIViewController
和一个 class 控制故事板中的页面。这里是 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];
该应用已被编程为在向左或向右滑动时切换视图。
我将按钮链接到它们的相关 classes,但我不知道如何通过按钮切换可见视图控制器。当在第二个视图控制器上按下其中一个按钮时,如何更改可见的 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" 将导致与用户手动导航相同的幻灯片。根据你是向前跳还是向后跳调整"direction"。
要在您的 child 视图控制器和它们的 parent 之间进行通信,请使用委托。首先,在您的 parent 视图控制器的 header 中声明一个委托,例如:
@protocol PhotoSourceDelegate <NSObject>
- (void)takePhoto;
- (void)chooseFromLibrary;
@end
更新您的 parent 视图控制器以实现此委托:
@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;
}
在显示 "Take Photo" 和 "Choose From Library" 按钮(p2?)的视图控制器的 header 中,添加一个 属性 来保存对委托的引用:
@property(nonatomic, weak) id<PhotoSourceDelegate> delegate;
当你实例化这个控制器时,一定要设置它的委托:
UIViewController *p2 = [self.storyboard instantiateViewControllerWithIdentifier:@"two"];
p2.delegate = self;
最后,在同一个视图控制器中,当您按下 "Take Photo" 按钮时,像这样调用委托:
if (self.delegate != nil) {
[self.delegate takePhoto];
}
当您按下 "Choose From Library" 按钮时,像这样调用委托:
if (self.delegate != nil) {
[self.delegate chooseFromLibrary];
}
委托的使用在 iOS 中非常普遍,因此快速搜索会找到很多教程 if/when 您已准备好更好地理解。
我有一个 UIPageViewController
连接到三个视图控制器
每个 UIViewController
按下 "Take Photo" 按钮时,第三个视图应滑入视图。当 "Choose From Library" 被按下时,第一个视图控制器应该滑入视图。
我有 3 个 classes 控制每个 UIViewController
和一个 class 控制故事板中的页面。这里是 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];
该应用已被编程为在向左或向右滑动时切换视图。
我将按钮链接到它们的相关 classes,但我不知道如何通过按钮切换可见视图控制器。当在第二个视图控制器上按下其中一个按钮时,如何更改可见的 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" 将导致与用户手动导航相同的幻灯片。根据你是向前跳还是向后跳调整"direction"。
要在您的 child 视图控制器和它们的 parent 之间进行通信,请使用委托。首先,在您的 parent 视图控制器的 header 中声明一个委托,例如:
@protocol PhotoSourceDelegate <NSObject>
- (void)takePhoto;
- (void)chooseFromLibrary;
@end
更新您的 parent 视图控制器以实现此委托:
@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;
}
在显示 "Take Photo" 和 "Choose From Library" 按钮(p2?)的视图控制器的 header 中,添加一个 属性 来保存对委托的引用:
@property(nonatomic, weak) id<PhotoSourceDelegate> delegate;
当你实例化这个控制器时,一定要设置它的委托:
UIViewController *p2 = [self.storyboard instantiateViewControllerWithIdentifier:@"two"];
p2.delegate = self;
最后,在同一个视图控制器中,当您按下 "Take Photo" 按钮时,像这样调用委托:
if (self.delegate != nil) {
[self.delegate takePhoto];
}
当您按下 "Choose From Library" 按钮时,像这样调用委托:
if (self.delegate != nil) {
[self.delegate chooseFromLibrary];
}
委托的使用在 iOS 中非常普遍,因此快速搜索会找到很多教程 if/when 您已准备好更好地理解。