首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每个viewController可以有多个视图吗?

每个viewController可以有多个视图吗?
EN

Stack Overflow用户
提问于 2011-04-27 19:58:19
回答 1查看 4.7K关注 0票数 0

这是我发现的一个相关问题,但它没有详细回答我的问题。

http://stackoverflow.com/questions/3209993/cocoa-touch-can-i-have-multiple-views-per-view-controller-or-specify-bounds-of

我有一个UIView类BallView,它被设置为ballViewController的默认视图。现在,这个视图有一个球根据加速度计弹来弹去。每次加速度计发送更新时,我都会调用一个私有函数draw

然而,我的主要问题是:我希望有多个这样的球在周围弹跳。

我必须为每个类重新创建视图吗?但随后还必须连接文件所有者的IBOutlet view。并且IBOutlet只能指向一个地址。

有没有别的办法来解决这个问题?

下面是我如何在ballViewController中实例化Ball View类:

代码语言:javascript
复制
[motionManager startAccelerometerUpdatesToQueue:queue withHandler:
 ^(CMAccelerometerData *accelerometerData, NSError *error){
     [(BallView *)self.view setAcceleration:accelerometerData.acceleration];
     [(BallView *)self.view performSelectorOnMainThread:@selector(draw) withObject:nil waitUntilDone:NO];
 }];

因此,这意味着,我的问题与那些多视图选项卡栏解决方案有点不同。因为在这些情况下,一次只显示一个视图。我想要4-5个视图叠加在一起。

有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-27 20:11:51

您说得对,视图控制器的view属性中只能有一个UIView。不过,该视图当然可以用来包含其他子视图。

我要做的就是用一个普通的旧UIView作为控制器的view,并让你的BallViews成为该视图的子视图。你的控制器仍然可以控制这些视图,只是它们不能都在它的view属性中。

编辑:如果您使用的是nib文件/接口生成器,将BallView添加为控制器视图的子视图非常简单-只需将UIView对象拖到视图上,然后在标识检查器中,您可以将视图的标识更改为您的BallView类。

如果你不使用IB,你也可以通过编程来做同样的事情:

代码语言:javascript
复制
// BallViewController.h
@interface BallViewController
{
    BallView* ballView;
}

@end

// BallViewController.m
@implementation BallViewController

- (void) loadView
{
    ...

    CGRect frame1 = ...
    CGRect frame2 = ...

    self.view = [[UIView alloc] initWithFrame:frame1];

    ballView = [[BallView alloc] initWithFrame:frame2] retain];
    [self.view addSubview:ballView];

    ...
}

@end
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5803717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档