gpt4 book ai didi

ios - UIPageViewController 在静态 View Controller 之间切换并保留(重用)内容

转载 作者:行者123 更新时间:2023-11-28 18:34:53 33 4
gpt4 key购买 nike

我有三个 View Controller :Settings、Chatbox 和 QuickMsg。

我想使用 UIPageViewController 在这三个 View Controller 之间切换。对于每个 View Controller ,我不想在滑动页面之间重新启动 View Controller ,因为它包含用户输入的数据并且我想保留数据。我将三个 View Controller 定义为静态变量。

当我在页面之间滑动时屏幕变黑。我哪里做错了?

提前致谢!

ChatboxController、SettingController 和QuickMsgController 是三个UIViewController Controller 。PagingViewController.h

#import <UIKit/UIKit.h>
#import "ChatboxController.h"
#import "SettingController.h"
#import "PagingViewController.h"
#import "QuickMsgController.h"
@class ChatboxController;
@class SettingController;
@class QuickMsgController;
@interface PagingViewController : UIViewController<UIPageViewControllerDataSource>

@property (strong, nonatomic) UIPageViewController *pageController;

@property (assign, nonatomic) NSInteger index;
+(ChatboxController*) getChatboxController;
+(SettingController*) getSettingsController;
@end

PagingViewController.m

#import "PagingViewController.h"

@interface PagingViewController ()

@end

@implementation PagingViewController

static ChatboxController* chatboxViewController;
static SettingController* settingViewController;
static QuickMsgController* quickMessageViewController;
int defaultIndex=1;
NSArray *viewControllers;
+(ChatboxController*) getChatboxController
{
return chatboxViewController;
}
+(SettingController*) getSettingsController
{
return settingViewController;
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {


self.index--;
if(self.index<0)
{
self.index=0;
}
return [self viewControllerAtIndex:self.index];

}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {

self.index++;

return [self viewControllerAtIndex:self.index];

}
- (UIViewController *)viewControllerAtIndex:(NSUInteger)index {
NSLog(@"index:%d",index);
if(index==1)
{
return chatboxViewController;
}
else if (index==0){
return settingViewController;
}else if(index==2)
{
NSLog(@"Quick Message");
return quickMessageViewController;
}else{
NSLog(@"error here");
return nil;
}

}
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController {
// The number of items reflected in the page indicator.
return 3;
}

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController {
// The selected item reflected in the page indicator.
return defaultIndex;
}

- (void)viewDidLoad
{
[super viewDidLoad];
chatboxViewController= [self.storyboard instantiateViewControllerWithIdentifier:@"chatbox"];
settingViewController= [self.storyboard instantiateViewControllerWithIdentifier:@"settings"];
quickMessageViewController=[self.storyboard instantiateViewControllerWithIdentifier:@"quickmessages"];
self.index=defaultIndex;

// [self performSelector:@selector(loadingNextView) withObject:nil afterDelay:2.0f];
self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];

self.pageController.dataSource = self;
[[self.pageController view] setFrame:[[self view] bounds]];
NSArray *viewControllers = [NSArray arrayWithObject:chatboxViewController];
[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

[self addChildViewController:self.pageController];
[[self view] addSubview:[self.pageController view]];
[self.pageController didMoveToParentViewController:self];

}


- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

最佳答案

将您的内容 View Controller 放在 NSArray 中:

@property (nonatomic, strong) NSArray *contentViewControllers;

使用:


- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)viewController {

NSUInteger index = [self.contentViewControllers indexOfObject:viewController];

if (index == 0) {
return nil;
}

return self.contentViewControllers[index - 1];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerAfterViewController:(UIViewController *)viewController {

NSUInteger index = [self.contentViewControllers indexOfObject:viewController];

if (index >= self.contentViewControllers.count - 1) {
return nil;
}

return self.contentViewControllers[index + 1];
}

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController {
return self.contentViewControllers.count;
}

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController {
return 0;
}

关于ios - UIPageViewController 在静态 View Controller 之间切换并保留(重用)内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20921206/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com