Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Xcode:如何在UIScrollView中从XIB文件添加自定义视图_Objective C_Xcode_Uiscrollview_Custom View - Fatal编程技术网

Objective c Xcode:如何在UIScrollView中从XIB文件添加自定义视图

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

我来自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的代码:

- (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]);