我们如何在不使用 nib 文件的情况下在 iPhone 应用程序中加载用户界面?我想使用 .m 文件加载应用程序的用户界面。可以吗?我们怎么能做到这一点。
4 回答
如果您想以编程方式执行此操作,则该loadView
方法旨在在不使用 NIB 或情节提要时创建视图。只需在您的视图控制器中编写一个loadView
并在那里创建您的视图。或者让loadView
您的子类创建一个实例UIView
,并将您的自定义视图的大部分代码放在该UIView
子类中。这是使用 Interface Builder 构建 NIB 或故事板的替代方法。
如果您在 中执行此操作loadView
,您只需确保设置self.view
为您创建的视图,然后您的视图控制器代码的其余部分可以view
像其他方式一样引用属性。
请参阅旧版视图控制器编程指南的以编程方式创建视图部分。它概述了基本过程并提供了代码示例。诚然,一些遗留文档并不完全相关(例如,值得注意的是,视图在内存压力下没有“卸载”,因此任何引用都不再相关),但它为以编程方式创建的视图层次结构提供了一些上下文。viewDidUnload
A View Controller在访问其视图时实例化其视图层次结构[broken link] 该指南的部分用于概述基本流程:
举例来说,这里有一个 Swift 3 示例loadView
,用于以编程方式创建其视图层次结构的视图控制器:
class ViewController: UIViewController {
weak var containerView: UIView!
weak var button: UIButton!
// Note, when programmatically creating views, you:
//
// - Implement the view hierarchy in `loadView` (not to be confused with `viewDidLoad`)
// - Must set `view` property
// - Must not call `super.loadView`
//
// This example creates a `view` for the view controller, and adds two subviews, a container and a button.
// Note, the "container" isn't really needed, but I just did it so I could visually demonstrate that the
// `frame` of the view was set properly. That's why I set it to be a different color of the main `view`
// and inset it.
override func loadView() {
view = UIView()
view.backgroundColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1)
let containerView = UIView()
containerView.backgroundColor = #colorLiteral(red: 0.2549019754, green: 0.2745098174, blue: 0.3019607961, alpha: 1)
containerView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(containerView)
self.containerView = containerView
let button = UIButton(type: .system)
button.translatesAutoresizingMaskIntoConstraints = false
button.addTarget(self, action: #selector(didTapButton(_:)), for: .touchUpInside)
button.setTitle("Back", for: .normal)
button.setTitleColor(.white, for: .normal)
containerView.addSubview(button)
self.button = button
NSLayoutConstraint.activate([
containerView.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor, constant: 10),
containerView.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor, constant: -10),
containerView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 10),
containerView.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -10),
button.centerXAnchor.constraint(equalTo: containerView.centerXAnchor),
button.centerYAnchor.constraint(equalTo: containerView.centerYAnchor)
])
}
func didTapButton(_ sender: Any) {
// do something
}
}
Sample *sample = [[Sample alloc]init];
sample.view.backgroundColor = [UIColor whiteColor];
[sample.view addSubView:aLabel];
[self.navigationController pushViewController:sample animated:YES]; //or
[self presentViewController:sample animated:YES completion:nil];
这只是一个例子。这里的 Sample 是没有 Nib 文件的 UIViewController 类。您可以使用 Nib 文件处理 UIViewController 类的方式来处理它。
添加不带 xib 的视图控制器。然后您可以以编程方式添加视图。例如。
在viewDidLoad方法中:
UIView *view = [[UIView alloc]init];
view.frame = CGRectMake(0, 10, 480, 320); //giveframe for full screen
[self.view addSubView:view];
类似的按钮、标签等。谷歌它。
覆盖 UIViewController 子类中的 loadView。初始化一个视图和你想要的任何子视图。确保此方法设置视图控制器的视图属性。