0

我对 UIScrollView 有一个非常奇怪的问题并添加了 UIViewControllers。看起来当 UIViewControllers 添加到 UIScrollView 进行分页时,UIViewController 会丢弃所有添加的对象。

在项目中,我有一个带有两个视图的故事板,它们正确连接到相应的代码。

我知道代码不会将添加的 UIViewController 移动到正确的 X,但在这个测试中,我只添加了一个 UIViewController,所以没关系。

这是滚动代码.h:

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

@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;
@property (strong, nonatomic) NSMutableArray *scrollController;

@end

这是滚动代码.m:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

self.scrollController = [[NSMutableArray alloc] init];

}

- (void)viewDidAppear:(BOOL)animated {

//just adding two controllers
TestViewController *first = [[TestViewController alloc] init];
[self.scrollView addSubview:first.view];
[self.scrollController addObject:first];

self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width *    self.scrollController.count, self.scrollView.frame.size.height);

self.pageControl.numberOfPages = [self.scrollController count];


}

- (void)scrollViewDidScroll:(UIScrollView *)sender {

// Update the page when more than 50% of the previous/next page is visible
CGFloat pageWidth = self.scrollView.frame.size.width;
int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;

self.pageControl.currentPage = page;
}

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

@end

这是视图控制器代码.h:

#import <UIKit/UIKit.h>

@interface TestViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *lblMsg;

@end

这是视图控制器代码.m:

#import "TestViewController.h"

@interface TestViewController ()

@end

@implementation TestViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.

NSLog(@"Label: %@", self.lblMsg);
}

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

@end

日志中的输出是:

Label: (null)

任何人都能够看到我做错了什么?

4

1 回答 1

0

如果您使用创建 ViewController

TestViewController *first = [[TestViewController alloc] init];

您的标签 (IBOutlet) 不会被链接。

在 Xcode 中导航到您的故事板,选择您的视图控制器并在右侧实用程序的身份检查器中分配一个唯一的故事板 ID(“myIdentifier”)。尝试

NSString *identifier = @"myIdentifier"; 
TestViewController *first = [self.storyboard instantiateViewControllerWithIdentifier:identifier];

看看文档:

每个视图控制器对象都是其视图的唯一所有者。您不能将同一个视图对象与多个视图控制器对象相关联。此规则的唯一例外是容器视图控制器实现可以将此视图作为子视图添加到其自己的视图层次结构中。在添加子视图之前,容器必须首先调用它的 addChildViewController: 方法来创建两个视图控制器对象之间的父子关系。

于 2013-08-28T17:28:06.823 回答