UIScrollView与IUViewController删除对象

时间:2013-08-28 13:34:16

标签: iphone ios objective-c uiviewcontroller uiscrollview

我对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

这是viewcontroller代码.h:

#import <UIKit/UIKit.h>

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

@end

这是viewcontroller代码.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)

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

1 个答案:

答案 0 :(得分:0)

如果使用

创建ViewController
TestViewController *first = [[TestViewController alloc] init];

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

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

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

查看文档:

  

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