简体   繁体   English

使用swift以编程方式UITableView

[英]Programmatically UITableView using swift

I'm trying to create a simple tableView programmatically using swift, so I wrote this code on "AppDelegate.swift" : 我正在尝试使用swift以编程方式创建一个简单的tableView,所以我在“AppDelegate.swift”上编写了这段代码:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    var tvc :TableViewController = TableViewController(style: UITableViewStyle.Plain)
    self.window!.rootViewController = tvc

    self.window!.backgroundColor = UIColor.whiteColor()
    self.window!.makeKeyAndVisible()
    return true
    }

Basically I added the TableViewController creation and added to the window. 基本上我添加了TableViewController创建并添加到窗口。 And this is the TableViewController code: 这是TableViewController代码:

class TableViewController: UITableViewController {

init(style: UITableViewStyle) {
    super.init(style: style)
 }

override func viewDidLoad() {
    super.viewDidLoad()
 }

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// #pragma mark - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
    return 1
}

override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
    return 10
}


override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {
    var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as UITableViewCell

    cell.textLabel.text = "Hello World"

    return cell
}

} }

So, when I try to run the code I receive this message: 所以,当我尝试运行代码时,我收到此消息:

Xcode6Projects/TableSwift/TableSwift/TableViewController.swift: 12: 12: fatal error: use of unimplemented initializer 'init(nibName:bundle:)' for class 'TableSwift.TableViewController' Xcode6Projects / TableSwift / TableSwift / TableViewController.swift:12:12:致命错误:对类'TableSwift.TableViewController'使用未实现的初始化程序'init(nibName:bundle :)'

The error occurs when the compiler is executing the 编译器执行时发生错误

super.init(style: style) super.init(风格:风格)

Any thoughts ? 有什么想法吗 ?

In Xcode 6 Beta 4 在Xcode 6 Beta 4中

Removing 删除

init(style: UITableViewStyle) {
    super.init(style: style)
}

will do the trick. 会做的。 This is caused by different initializer behavior between Obj-C and Swift. 这是由Obj-C和Swift之间的不同初始化器行为引起的。 You have created a designated initializer. 您已创建指定的初始化程序。 If you remove it, all initializers will be inherited. 如果删除它,将继承所有初始值设定项。

The root cause is probably in -[UITableViewController initWithStyle:] which calls 根本原因可能是-[UITableViewController initWithStyle:]调用

[self initWithNibName:bundle:]

I actually think this might be a bug in the way Obj-C classes are converted to Swift classes. 我实际上认为这可能是Obj-C类转换为Swift类的方式中的一个错误。

Instead of 代替

init(style: UITableViewStyle) {
    super.init(style: style)
}

you might find this handy: 你可能会发现这个方便:

convenience init() {
    self.init(style: .Plain)
    title = "Plain Table"
}

Then, you can just call TableViewController() to initialize. 然后,您可以调用TableViewController()进行初始化。

It is as simple as writing a function 它就像编写一个函数一样简单

    func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
{
    let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "MyTestCell")

    cell.text = self.Myarray[indexPath.row]
    cell.textLabel.textColor = UIColor.greenColor()

    cell.detailTextLabel.text = "DummyData #\(indexPath.row)"
    cell.detailTextLabel.textColor = UIColor.redColor()
    cell.imageView.image = UIImage(named:"123.png")
    return cell
}

Cell Function Use: 细胞功能用途:

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!{

    var cell = tableView.dequeueReusableCellWithIdentifier(kLCellIdentifier) as UITableViewCell!
    if !cell {
        cell = UITableViewCell(style:.Default, reuseIdentifier: kLCellIdentifier)
    }
    cell.backgroundColor = UIColor.clearColor()
    cell.textLabel.text = arrData[indexPath.row]
    cell.image = UIImage(named: "\(arrImage[indexPath.row])")   
    cell.accessoryType  = UITableViewCellAccessoryType.DetailDisclosureButton
    cell.selectionStyle = UITableViewCellSelectionStyle.None
    return cell
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM