Objective c Xcode:如何在UIScrollView中从XIB文件添加自定义视图
我来自Android和Java的背景,对Xcode开发比较陌生 我使用的是Xcode 5.0.2,通过选择CreateanewXcode项目->单视图应用程序,创建了我的第一个IOS应用程序。初始的项目结构已经生成,我发现有一个主的_iphone.storyboard文件,它打开了一个UI设计器,我可以在其中拖放项目。我选择了UIScrollView并将其拖到已生成的主窗口中 现在在控制器头文件中,我添加了@property(nonatomic,retain)IBOutlet UIScrollView*scrollView以便我可以从控制器代码内部访问scrollView 我想通过编程方式向scrollView添加一个项目,因此我创建了一个模板自定义视图,方法是为用户界面添加新的file->Objective-C类和XIB,将其命名为TSTFilesInfoController,并通过在视图中添加视图和标签来设计XIB。与上面的scrollView相同,我创建了一个属性以在我的控制器类中公开mainView 我在UIScrollView的控制器内硬编码了一个10倍的循环,在for循环内我正在实例化TSTFilesInfoController并将视图添加到UIScrollView。但是当我运行应用程序时,UIScrollView中没有显示或添加任何内容 以下是添加CustomView的代码:Objective c Xcode:如何在UIScrollView中从XIB文件添加自定义视图,objective-c,xcode,uiscrollview,custom-view,Objective C,Xcode,Uiscrollview,Custom View,我来自Android和Java的背景,对Xcode开发比较陌生 我使用的是Xcode 5.0.2,通过选择CreateanewXcode项目->单视图应用程序,创建了我的第一个IOS应用程序。初始的项目结构已经生成,我发现有一个主的_iphone.storyboard文件,它打开了一个UI设计器,我可以在其中拖放项目。我选择了UIScrollView并将其拖到已生成的主窗口中 现在在控制器头文件中,我添加了@property(nonatomic,retain)IBOutlet UIScrollV
- (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");
}
}
这是对UIViewController子类的滥用。不要将视图控制器用作钓竿来钩住xib文件中的视图。只需加载xib文件并自己获取视图,然后将其填充到界面中 对于如何在界面中手动放置视图控制器的视图,有一些复杂的规则,一般来说,这是您不愿意做的事情。但是,让视图动态地、直接地来来去去去是很容易和常见的 假设.xib文件名为TSTFilesInfo.xib,它有一个顶级UIView子类对象,即类MyView,这就是您想要的对象。然后:
MyView* v = (MyView*)
([[UINib nibWithNibName:@"TSTFilesInfo" bundle:nil]
instantiateWithOwner:nil options:nil][0]);
这将加载nib一次,实例化其内容,并向您提供对该实例(本例中为UIView)的引用。现在将v
插入您的界面。将该引用保留在实例变量中(可能很弱,因为它由它的superview保留),以便随后可以配置MyView的任何子视图,并与您创建的子视图通信
注意:但是,我必须说,从目前的示例来看,我觉得这里真正需要的是UITableView,而不是简单的UIScrollView。它完全可以完成您在这里所做的事情。您是否在XIB文件中连接了mainView?为什么要声明mainView而不是ViewController的属性
view
。mainView连接到文件所有者中的视图,并且类设置为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您能通过一个示例或基于我上面的代码详细说明您的答案吗?谢谢。非常感谢matt,我会修改我的代码,看看能否成功地将其添加到UIScrollView。但是请查看我的修改,特别是最后的注释。
MyView* v = (MyView*)
([[UINib nibWithNibName:@"TSTFilesInfo" bundle:nil]
instantiateWithOwner:nil options:nil][0]);