0

我们如何在不使用 nib 文件的情况下在 iPhone 应用程序中加载用户界面?我想使用 .m 文件加载应用程序的用户界面。可以吗?我们怎么能做到这一点。

4

4 回答 4

3

如果您想以编程方式执行此操作,则该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
    }

}
于 2013-07-02T04:52:16.010 回答
2
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 类的方式来处理它。

于 2013-07-02T05:17:23.720 回答
1

添加不带 xib 的视图控制器。然后您可以以编程方式添加视图。例如。

viewDidLoad方法中:

UIView *view = [[UIView alloc]init];
view.frame = CGRectMake(0, 10, 480, 320);  //giveframe for full screen
[self.view addSubView:view];

类似的按钮、标签等。谷歌它。

于 2013-07-02T04:49:01.280 回答
0

覆盖 UIViewController 子类中的 loadView。初始化一个视图和你想要的任何子视图。确保此方法设置视图控制器的视图属性。

于 2013-07-02T04:49:20.427 回答