【问题标题】:UIView scrolling into UIScrollView with pageControlUIView 使用 pageControl 滚动到 UIScrollView
【发布时间】:2011-10-15 13:41:00
【问题描述】:

我正在尝试使用带有 pageControl 的 UIScrollView 制作一个“说明”窗口,其中包含一些 UIViewController:

- (void)loadScrollViewWithPage:(NSInteger)page {
    if (page < 0 || page >= kNumberOfPages) return;

     switch (page) {
        case 0:
           [[WelcomeViewController alloc] initWithNibName:@"WelcomeViewController" bundle:nil];
             break;
        case 1:            
            [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
            break;
        case 2:
            [[FirstTabViewController alloc] initWithNibName:@"FirstTabViewController" bundle:nil];
            break;
        case 3:
            [[SecondTabViewController alloc] initWithNibName:@"SecondTabViewController" bundle:nil];
            break;

        case 4:
            [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
            break;
        default:
            [[WelcomeViewController alloc] initWithNibName:@"WelcomeViewController" bundle:nil];
            break;

    }

}

我无法让它工作。

滚动有效,但我无法显示我制作的任何 UIViewController!

我怎样才能让它工作?

【问题讨论】:

    标签: iphone objective-c uiview uiscrollview


    【解决方案1】:

    听起来您对快速修复而不是正确解决更感兴趣。好的。以下是您的操作方法。

    - (void)loadScrollViewWithPage:(NSInteger)page {
        if (page < 0 || page >= kNumberOfPages) return;
    
        UIViewController * newController = NULL;
    
         switch (page) {
            case 0:
               newController = (UIViewController *)[[WelcomeViewController alloc] initWithNibName:@"WelcomeViewController" bundle:nil];
                 break;
            case 1:            
                newController = (UIViewController *)[[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
                break;
            case 2:
                newController = (UIViewController *)[[FirstTabViewController alloc] initWithNibName:@"FirstTabViewController" bundle:nil];
                break;
            case 3:
                newController = (UIViewController *)[[SecondTabViewController alloc] initWithNibName:@"SecondTabViewController" bundle:nil];
                break;
            case 4:
                newController = (UIViewController *)[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
                break;
            default:
                newController = (UIViewController *)[[WelcomeViewController alloc] initWithNibName:@"WelcomeViewController" bundle:nil];
                break;
        }
    
        if(newController)
        {
            // this method is inside a UIScrollView, right?
            [self.contentView addSubview: newController.view];
        }
    
        // at this point, newController has been alloc'd and retained.  You should either release it next time you enter 
        // into loadScrollViewWithPage (i.e. declare newController as an object in your .h file) or you should 
        // add "autorelease" after all of those initWithNibName calls up there
    }
    

    【讨论】:

    • 试过这种方式。现在的问题是它加载了视图,但它在我每次滚动时将它们全部加载到第一页(第 0 页)中!我的意思是,如果我进入第一页(0),然后滚动到下一页,我什么也看不到。但是如果我回到第一页,我可以看到第一页上的控制器!
    • 我认为阅读 iOS 视图控制器编程指南是个好主意:developer.apple.com/library/ios/#featuredarticles/…
    【解决方案2】:

    尝试使用 UIPageViewController 并向其中添加许多不同的视图控制器(及其滚动视图)。

    http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIPageViewControllerClassReferenceClassRef/UIPageViewControllerClassReference.html

    附言UIPageViewController 是 iOS 5 和更新版本。

    【讨论】:

    • 我也想用它,谢谢。但我也想知道我该如何解决这个问题!
    • @jcm 我该怎么做才能给他们看?我应该声明一个 tmpController 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2018-06-27
    • 2015-11-21
    • 2013-10-27
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    相关资源
    最近更新 更多