将 viewController 视图添加到 UIScrollView
Posted
技术标签:
【中文标题】将 viewController 视图添加到 UIScrollView【英文标题】:Adding viewController views to UIScrollView 【发布时间】:2012-02-12 04:30:20 【问题描述】:尽管有很多类似的帖子,但我仍然无法正常工作。 我有两个 UIViewControllers,我在 IB 中设计了 UILabels 和 imageviews 等。 我想将这些添加到滚动视图中,以便在它们之间进行分页。
我定义了将每个scrollViewcontroller 与其在IB 中的元素连接起来的出口,但是,控制器本身是我在viewDidLoad 中的主视图控制器内以编程方式创建的。创建它们后,我从主视图控制器分配一些值,而不是将其作为子视图添加到 scrollViewController。但是什么都没有显示。从我所做的调试中,当我在分配值后设置断点时,我可以看到元素为零。它们应该从 xib 文件中加载,但似乎没有被读取。即使作为测试,我也尝试初始化其中一个元素(例如 UILabel)并将其设置为该子视图控制器,但它什么也不会显示。这里有一些代码可以更好地解释一下。
在主视图控制器中
detailControllerA *tempA = [[detailControllerA alloc] initWithNibName:@"detailOverviewA" bundle:nil];
self.overviewA = tempA;
[tempA release];
self.overviewA.someLabel.text = @"Some Text";
detailScrollView.contentSize = CGSizeMake(scrollWidth, scrollHeight);
detailScrollView.pagingEnabled = YES;
[detailScrollView addSubview:self.overviewA.view];
在 detailControllerA 实现中,我在 loadView 中设置了框架:
-(void)loadView
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 90)];
self.view = view;
[view release];
我还在 detailControllerA.h 中使用 IBOutlets 定义了标签等,并在 xib 文件中实现了元素。
任何想法为什么 xib 在以编程方式创建时无法正确加载?
【问题讨论】:
我猜你需要在做任何事情之前调用 [super loadView]。即使您从 nib 加载,我确信 loadView 仍然是在控制器中创建视图所需的一些方法。 我现在想通了,有趣的是,-(void)loadView 是问题所在。由于视图是在界面构建器中生成的(使用框架设置),当 loadView 触发时,它正在创建一个新视图,将界面构建器中创建的视图吹走。 【参考方案1】:这样试试:
NSUInteger scrollContentCount = 0;
for (NSUInteger arrayIndex = 0;
arrayIndex < [contents count];
arrayIndex++)
// set scorllview properties
CGRect frame;
frame.origin.x = self.mScrollView.frame.size.width * arrayIndex;
frame.origin.y = 0;
frame.size = self.mScrollView.frame.size;
myScrollView.autoresizingMask = YES;
// alloc - init PODetailsView Controller
myController = [[MyController alloc] initWithNibName:@"MyController" bundle:[NSBundle mainBundle]];
[myController.view setFrame:frame];
// add view in scroll view
[self.myScrollView addSubview:myController.view];
scrollContentCount = scrollContentCount + 1;
// set scroll content size
self.myScrollView.contentSize =
CGSizeMake(self.myScrollView.frame.size.width * scrollContentCount,
self.myScrollView.frame.size.height);
不要释放for循环中的内容控制器对象。
根据您的要求设置您的 scrollView contentSize。
希望这对你有帮助。
【讨论】:
【参考方案2】:有趣的是,-(void)loadView 是问题所在。
由于视图是在界面构建器中生成的(使用框架设置),当 loadView 触发时,它正在创建一个新视图,将界面构建器中创建的视图吹走。
【讨论】:
以上是关于将 viewController 视图添加到 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章
将 viewController 视图添加到 UIScrollView