以编程方式将视图加载到 UIViewController
Posted
技术标签:
【中文标题】以编程方式将视图加载到 UIViewController【英文标题】:Loading a View programatically in to a UIViewController 【发布时间】:2013-04-08 18:26:21 【问题描述】:我实际上有 2 个问题。首先,我将解释这个场景。我有一个简单的 Storyboard 应用程序。第一个控制器是显示邮件类型列表的UITableViewController
。当点击一个单元格时,它会转到UIViewController
,并且根据所选的邮件类型,它会将UIView
加载到UIViewController
中。这一切都很好。我的问题是,
我有一个UIView
,身高559。我在UIViewController
中放了一个UIScrollView
,这样当加载了额外高度的UIView
时,它就可以滚动了。但是,UIView
并没有发生这种情况,而是调整为UIViewController
的大小。如何保持其原始高度并将其嵌入到UIScrollView
中?
在界面生成器中,我在UIViewController
的底部放置了一个UIToolbar
。但是当UIView
被加载到其中时,UIToolbar
就会消失。我猜UIView
出现在UIToolbar
(?) 的顶部。我怎样才能避免这种情况发生?
我知道这一定有点让人难以理解。因此,我上传了一个 Xcode 项目,演示了 here 的 2 个问题。
请看一下,告诉我应该怎么做。
谢谢。
【问题讨论】:
请详细说明哪种“邮件类型”有哪些问题。我看到“项目备忘录”显示了一个底部看起来像工具栏的视图。哪种“邮件类型”会导致高度和滚动问题? 它是 Email 邮件类型。对此感到抱歉。 【参考方案1】:我发现您在项目中所做的事情存在一些问题,这可以解释为什么您会得到这些结果。
在NewMailViewController.m
中,您将在情节提要中创建的视图(具有滚动视图和工具栏的视图)替换为您从笔尖加载的视图(即self.view = [nib objectAtIndex:0];
)。尝试在 -loadView 中执行此操作
[super loadView];
UIView *someView = nil;
if ([self.mailTypeName isEqualToString:@"Email"])
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"Email" owner:self options:nil];
someView = [nib objectAtIndex:0];
else if ([self.mailTypeName isEqualToString:@"Facsimile"])
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"Facsimile" owner:self options:nil];
someView = [nib objectAtIndex:0];
else if ([self.mailTypeName isEqualToString:@"Memorandum"])
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"Memorandum" owner:self options:nil];
someView = [nib objectAtIndex:0];
else if ([self.mailTypeName isEqualToString:@"ProjectMemo"])
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ProjectMemo" owner:self options:nil];
someView = [nib objectAtIndex:0];
CGRect frame = someView.frame;
frame.size.width = self.myScrollView.frame.size.width;
[someView setFrame: frame];
[self.myScrollView addSubview: someView];
[self.myScrollView setContentSize: someView.bounds.size];
您会注意到我在上面的 sn-p 代码中引用了滚动视图。您需要在 NewMailViewController
类中为滚动视图创建一个出口,以便您可以根据需要引用它。它涉及将其放入您的头文件中:
@property (strong, nonatomic) IBOutlet UIScrollView *myScrollView;
您需要将定义的插座连接到实际故事板的滚动视图。您可以在 Internet 上搜索“在 Xcode 中创建或连接 outlets”以获取更多信息。
工具栏似乎是滚动视图的子视图。当滚动视图的内容滚动时,您不希望工具栏停留在视图的底部吗?如果是这样,您需要将该工具栏视图从滚动视图中移出。
以下是更改:http://www62.zippyshare.com/v/90505016/file.html
【讨论】:
以上是关于以编程方式将视图加载到 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ios swift 中以编程方式将情节提要视图控制器加载到标签栏控制器中?
在 Swift 中以编程方式将视图添加到 stackview