簡體   English   中英

ViewDidLoad不斷在UIPageViewController上被調用

[英]ViewDidLoad keeps getting called on UIPageViewController

我正在嘗試制作一個帶有UITableViewController的UIPageViewController。

我無法讓UIPageViewController正常工作。 ViewDidLoad不斷被調用,並且視圖從不顯示在我的iOS模擬器上。

這是我的課程:

ProgramViewController.h:

#import <UIKit/UIKit.h>
#import "TableViewController.h"

@interface ProgramViewController : UIPageViewController <UIPageViewControllerDataSource>
{
    UIPageViewController *programViewController;
    NSArray *pageContent;

}
@property (strong, nonatomic) UIPageViewController *programViewController;
@property (strong, nonatomic) NSArray *pageContent;
@property (strong, nonatomic) NSArray *listArray;
@property (strong, nonatomic) NSArray *pageTitles;

ProgramViewController.m

#import "ProgramViewController.h"

@implementation ProgramViewController
@synthesize programViewController,pageContent;

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"ViewDidLoad");

    _pageTitles = @[@"page0", @"page1", @"page2"];

    self.programViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"2"];
    self.programViewController.dataSource = self;

    TableViewController *startingViewController = [self viewControllerAtIndex:0];
    NSLog(@"description = %@",[startingViewController description]);
    NSArray *viewControllers = @[startingViewController];
    [self.programViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

    // Change the size of page view controller
    self.programViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 30);

    [self addChildViewController:programViewController];
    [self.view addSubview:programViewController.view];
    [self.programViewController didMoveToParentViewController:self];
}


#pragma mark - Page View Controller Data Source

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSUInteger index = ((TableViewController*) viewController).pageIndex;

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

    index--;
    return [self viewControllerAtIndex:index];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger index = ((TableViewController*) viewController).pageIndex;

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

    index++;
    if (index == [self.pageTitles count]) {
        return nil;
    }
    return [self viewControllerAtIndex:index];
}

- (TableViewController *)viewControllerAtIndex:(NSUInteger)index
{
    if (([self.pageTitles count] == 0) || (index >= [self.pageTitles count])) {
        return nil;
    }
    NSLog(@"description = %d",[self.pageTitles count]);

    // Create a new view controller and pass suitable data.
    TableViewController *tableViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"2.0"];
    tableViewController.titleText = self.pageTitles[index];
    tableViewController.pageIndex = index;

    return tableViewController;
}

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

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

然后我有UITableViewController類。 當我自己使用它時,此類可以完美地工作,但是我不知道是否試圖將UITableViewController放在UIPageViewController中是一個問題:

TableViewController.h

#import <UIKit/UIKit.h>

@interface TableViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate>
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@property NSUInteger pageIndex;
@property NSString *titleText;

@end

TableViewController.m

#import "TableViewController.h"
#import "ProgramCell.h"

@implementation TableViewController
{
    NSArray *arrayDays;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Initialize table data
    for(int i=0;i<10;i++){

    }
    arrayDays = [NSArray arrayWithObjects:@"Egg Benedict", @"Mushroom Risotto", @"Full Breakfast", @"Hamburger", @"Ham and Egg Sandwich", @"Creme Brelee", @"White Chocolate Donut", @"Starbucks Coffee", @"Vegetable Curry", @"Instant Noodle with Egg", @"Noodle with BBQ Pork", @"Japanese Noodle with Pork", @"Green Tea", @"Thai Shrimp Cake", @"Angry Birds Cake", @"Ham and Cheese Panini", nil];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"description = %d",[arrayDays count]);
    return [arrayDays count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"CustomCell";

    ProgramCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    NSLog(@"description = %@",[cell description]);

    if (cell == nil) {
        NSLog(@"cell nil");
        cell = [[ProgramCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }
    cell.durationLabelCell.text = @"HOLA";


    return cell;
}
@end

在Xcode控制台上,我不斷得到“ NSLog(@'ViewDidLoad');”的結果。 在我的ProgramViewController.h上。 只要有內存,該應用程序就會實例化ViewController,然后崩潰。

如果有人知道為什么會這樣,那就太好了。 謝謝

IMP:您的ProgramViewController類具有一個名為programViewController的變量(和屬性),因此以下說明可能令人困惑。 為了ProgramViewController ,我將以黑體顯示classProgramViewController (大寫P)和普通字體的變量: programViewController (小寫p)。


這行代碼在您的viewDidLoad

self.programViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"2"];

從情節ProgramViewController實例化一個新的頁面視圖控制器,然后將其添加到ProgramViewController

如果故事板上的標識符為2的視圖控制器也是ProgramViewController (我懷疑是這種情況),則說明您正在創建重復事件。 每次添加一個ProgramViewController並依次在viewDidLoad創建一個新的。

您在ProgramViewController類中不需要另一個programViewController變量。 刪除該變量和屬性。 使用self而不是self.programViewController調用setViewControllers並刪除添加programViewController作為子視圖和控制器的所有行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM