1

我想关闭页面视图控制器与IBAction按钮,我可以关闭视图(PageContentViewController),新视图(LoginViewController)显示,但页面控制的“点”仍然在这里,并且我无法与新视图(LoginViewController)进行通信。 我在做什么错?removeFromSuperView与页面视图控制器

这里是我的代码:

LoginViewController.h:

#import "PageContentViewController.h" 
@interface LoginViewController : UIViewController <UIPageViewControllerDataSource> 
@property (strong, nonatomic) UIPageViewController *pageViewController; 
@property (strong, nonatomic) NSArray *pageTitles; 
@property (strong, nonatomic) NSArray *pageImages; 
@end 

LoginViewController.m:

- (void)viewDidLoad 
    { 
    [super viewDidLoad]; 
     // Create the data model 
     _pageTitles = @[@"Over 200 Tips and Tricks", @"Discover Hidden Features", @"Bookmark Favorite Tip", @"Free Regular Update"]; 
     _pageImages = @[@"FIRST_img.jpg", @"FIRST_img.jpg", @"FIRST_img.jpg", @"FIRST_img.jpg"]; 

     // Create page view controller 
     self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"]; 
     self.pageViewController.dataSource = self; 

     PageContentViewController *startingViewController = [self viewControllerAtIndex:0]; 
     NSArray *viewControllers = @[startingViewController]; 
     [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 



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

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

    } 


- (PageContentViewController *)viewControllerAtIndex:(NSUInteger)index 
{ 
    if (([self.pageTitles count] == 0) || (index >= [self.pageTitles count])) { 
     return nil; 
    } 

    // Create a new view controller and pass suitable data. 
    PageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"]; 
    pageContentViewController.imageFile = self.pageImages[index]; 
    pageContentViewController.titleText = self.pageTitles[index]; 
    pageContentViewController.pageIndex = index; 

    return pageContentViewController; 
} 


#pragma mark - Page View Controller Data Source 

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

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

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

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

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

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

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

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

PageContentViewController.h:

@interface PageContentViewController : UIViewController 
@property (weak, nonatomic) IBOutlet UIImageView *backgroundImageView; 
@property (weak, nonatomic) IBOutlet UILabel *titleLabel; 
@property NSUInteger pageIndex; 
@property NSString *titleText; 
@property NSString *imageFile; 
- (IBAction)dismissButton:(id)sender; 
@end 

PageContentView Controller.m:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.backgroundImageView.image = [UIImage imageNamed:self.imageFile]; 
    self.titleLabel.text = self.titleText; 

} 

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

- (IBAction)dismissButton:(id)sender { 
    [self.view performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:NO]; 
    [self performSelectorOnMainThread:@selector(removeFromParentViewController) withObject:nil waitUntilDone:NO]; 


} 
@end 

回答

2

您删除PageContentViewController而不是PageViewController(它仍然存在)。 尝试在dismissButton方法[self.view.superview使用...

编辑:

的好办法,就是从父与标准代码中删除父:

[self willMoveToParentViewController:nil]; 
    [self.view removeFromSuperview];    
    [self removeFromParentViewController]; 

但要做到这一点,你做的,从孩子父母删除,然后尝试使用如下代码:

[self.parentViewController willMoveToParentViewController:nil]; 
    [self.parentViewController.view removeFromSuperview];    
    [self.parentViewController removeFromParentViewController]; 

或[self.parentViewController.parentViewController ...它DEPE发现层次结构。

+0

首先,感谢您的回复!我已经替换“[self.view performSelectorOnMainThread:@selector(removeFromSuperview)withObject:nil waitUntilDone:NO];”与“[self.view.superview performSelectorOnMainThread:@selector(removeFromSuperview)withObject:nil waitUntilDone:NO];”但它是一样的问题...... :( – Viny76 2014-10-10 18:59:20

+0

更新了答案) – kabarga 2014-10-10 19:41:21

+0

谢谢你!这工作完美! – Viny76 2014-10-10 20:23:44

相关问题