【发布时间】:2014-02-03 01:55:52
【问题描述】:
来自 Android 和 Java 背景,我是 Xcode 开发的新手。
我正在使用 Xcode 5.0.2 并通过选择 Create a New Xcode Project -> Single View Application 创建了我的第一个 IOS 应用程序。初始项目结构已经生成,我发现有一个 Main_iphone.storyboard 文件打开了一个 UI 设计器,我可以在其中拖放项目。我选择了 UIScrollView 并将其拖到已经生成的主窗口中。
现在在 Controller 头文件中,我添加了 @property (nonatomic, retain) IBOutlet UIScrollView *scrollView; 以便我可以从我的控制器代码中访问 scrollView。
我想以编程方式向 scrollView 添加一个项目,所以我通过添加新文件创建了一个模板自定义视图 -> Objective-C Class with XIB for User Interface,将其命名为 TSTFilesInfoController 并通过添加视图和标签来设计 XIB视图内。与上面的 scrollView 相同,我创建了一个属性来在我的控制器类中公开 mainView。
我在 UIScrollView 的控制器和 for 循环中硬编码了一个 10x 循环,我正在实例化 TSTFilesInfoController 并将视图添加到 UIScrollView。但是当我运行应用程序时,UIScrollView 中没有显示或添加任何内容。
添加自定义视图的代码如下:
- (void)viewDidLoad {
[super viewDidLoad];
for ( int i = 0; i < 10 ; i++) {
TSTFilesInfoController *info = [[TSTFilesInfoController alloc] init];
[self addChildViewController:info];
[self.scrollView addSubview:info.mainView];
NSLog(@"View has been added into the scrollView");
}
}
谁能告诉我我的代码有什么问题以及实现我想要的输出的正确方法是什么?提前感谢您的帮助。
-- 编辑--
此代码在 TSTFilesInfoController.m 中自动生成
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
【问题讨论】:
-
你是否在XIB文件中连接了mainView?为什么要声明一个mainView而不是ViewController的属性
view。 -
mainView 连接到 File Owner 中的视图,并且类设置为 TSTFilesInfoController。我将 info.mainView 更改为 info.view 并且有进展。 TSTFilesInfoController 的 viewDidLoad 已被调用。不使用 info.mainView 调用此方法。但 UI 仍然没有显示任何内容。还是一个空白的 UIScrollView
-
如果我有 xib 文件,我想通过
initWithNibNamed:初始化我的 viewController。你可以尝试检查你的视图框架是否不是ZERO -
我已经编辑了问题,并包含了 initWithNibNamed 的代码。我在循环中添加了一个日志,用于打印实例化的 TSTFilesInfoController 的尺寸,并打印此 info.view.frame 尺寸 x 0.000000, y 0.000000, w 320.000000, h 130.000000
标签: objective-c xcode uiscrollview custom-view