当前位置: 首页 > 面试题库 >

在Swift中以编程方式创建UITableView

秦鸿羽
2023-03-14
问题内容

我尝试以编程方式实现UITableView,而不使用xib或Storyboards。这是我的代码:

ViewController.swift

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let table: UITableViewController = MyTableViewController()
        let tableView: UITableView = UITableView()
        tableView.frame = CGRect(x: 10, y: 10, width: 100, height: 500)
        tableView.dataSource = table
        tableView.delegate = table

        self.view.addSubview(tableView)
    }
}

MyTableViewController.swift

import UIKit

class MyTableViewController: UITableViewController {

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        NSLog("sections")
        return 2
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        NSLog("rows")
        return 3
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        NSLog("get cell")
        let cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "Cell")
        cell.textLabel!.text = "foo"
        return cell
    }  
}

但是当我运行应用程序时,我得到的只是空表。在日志中,我看到了sections和的几行rows,但没有get cell。如何修复此代码以获取包含6行foo文本的表格?


问题答案:

注意:
正如您提到的,您刚刚开始在中进行编程Swift。我以编程方式创建了tableView。Copypaste下面的代码放入您的文件viewController
运行 项目…

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    private let myArray: NSArray = ["First","Second","Third"]
    private var myTableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let barHeight: CGFloat = UIApplication.shared.statusBarFrame.size.height
        let displayWidth: CGFloat = self.view.frame.width
        let displayHeight: CGFloat = self.view.frame.height

        myTableView = UITableView(frame: CGRect(x: 0, y: barHeight, width: displayWidth, height: displayHeight - barHeight))
        myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
        myTableView.dataSource = self
        myTableView.delegate = self
        self.view.addSubview(myTableView)
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("Num: \(indexPath.row)")
        print("Value: \(myArray[indexPath.row])")
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return myArray.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath as IndexPath)
        cell.textLabel!.text = "\(myArray[indexPath.row])"
        return cell
    }
}

输出:

在此处输入图片说明



 类似资料:
  • 问题内容: 我正在尝试为自己创建一个自定义单元,但是遇到了一些困难。 首先,我无法使用InterfaceBuilder,因为我正在Xcode中对该bug进行变体。每次我在Interface Builder中单击一个元素时,该视图中的所有内容的高度和宽度均为零,并在视图外部重新定位。此外,我想学习如何以编程方式执行此操作。 其次,我在项目中使用Swift语言。我一直在尝试遵循此演示,并尽最大努力将O

  • 问题内容: 我正在尝试以编程方式构建UI。如何使该动作起作用?我正在用Swift开发。 viewDidLoad中的代码: 问题答案: 您只是在选择器名称的末尾缺少冒号。因为按下需要一个参数,所以冒号必须在该位置。而且,您按下的函数不应嵌套在viewDidLoad中。 编辑:更新以反映Swift 2.2中的最佳实践。应该使用#selector()而不是不推荐使用的文字字符串。

  • 问题内容: 我一直在尝试以编程方式重做我的应用程序上的工作。(不使用情节提要) 除了手动制作导航控制器外,我几乎完成了。 我一直在做一些研究,但找不到任何手动实现此方法的文档。(我开始将应用程序制作为单视图应用程序) 目前,我只有1个ViewController。当然是appDelegate 导航控制器将在应用程序的所有页面中使用。 如果有人可以帮助我,或发送指向一些适当文档的链接以编程方式进行此

  • 问题内容: 我正在尝试以编程方式创建UIImage视图,我有一个新视图,并且尝试这样做 这行不通,因为我不知道 您 在第二行中应该看到的是什么。 问题: 如何通过编码而不是在情节提要中使UIImageView出现在屏幕上 问题答案: 首先,您从图片文件中创建一个,然后从中创建一个: 最后,您需要给出一个框架并将其添加到视图中以使其可见:

  • 问题内容: 有没有一种方法可以在Windows中创建链接? 我发现使用的样本或必须下载的样本。 我需要一个简单的解决方案。那可能吗? 问题答案: 好了,我不得不使用创建快捷方式的方法,但是实际上我需要的是一个文件夹,但是会创建一个。 最终我用来创建。

  • 问题内容: 我有一个名为Variable的类,其定义如下: 我想创建26个Variable的大写单字母实例,如下所示: 到目前为止,我已经尝试了各种解决方案,而我想出的最好的解决方案是: 但是,这无法运行,并给我这个错误: 我究竟做错了什么? 问题答案: from string import uppercase _g = globals() for char in uppercase: _g[ch