与UIViewController里面的按钮的表视图

时间:2015-10-30 14:26:30

标签: swift

我正在尝试使用带有UIViewController内部单元格的表格视图,我希望每一行都有一个按钮。

我使用UIViewController而不是UITableView的原因是因为我希望在该视图中有其他内容而不是表视图所占用的整个屏幕。

我遇到的问题是我只在最后一个单元格中看到一个按钮。我如何解决这个问题,以便每一行都有按钮? 我希望可以使用这样的东西

import UIKit

类ViewController:UIViewController,UITableViewDataSource,UITableViewDelegate {

@IBOutlet weak var logButton: UIButton!
@IBOutlet weak var mytableView: UITableView!
    let carLocations = ["Row One", "Row Two", "Row Three"]
override func viewDidLoad() {
    super.viewDidLoad()
    mytableView.dataSource = self
}

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

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

}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
   let myCell: UITableViewCell = mytableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)


    myCell.textLabel?.text = carLocations[indexPath.row]
    myCell.detailTextLabel?.text = " Detailed text"
    logButton.tag = indexPath.row
    // I was hoping that I could use something like this
    // myCell.logButton.tag = indexPath.row
    return myCell
}

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if (editingStyle == UITableViewCellEditingStyle.Delete) {
        // handle delete (by removing the data from your array and updating the tableview)
    }
}

} enter image description here

4 个答案:

答案 0 :(得分:1)

在您的tableview上删除UITableViewCell。这将为您提供自定义单元格外观的选项。创建一个继承自UITableViewCell的新类,并将其作为类添加到tableview单元格中。从单元格到此新文件创建出口,然后使用cellForRowAtIndexPath设置单元格内控件的属性。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! CBTableViewCell
    // add self as delegate for tablecell so delegate can call the function defined within
    cell.delegate = self
    cell.title.text = self.items[indexPath.row]
    return cell
}

答案 1 :(得分:1)

我会使用Custom Cells来解决这个问题......

{{1}}

你的手机:

{{1}}

答案 2 :(得分:1)

您可以这样使用自定义单元格。

创建一个子类为UITableViewCell的新swift文件。

通过选择您的单元格将该类分配给您的单元格,然后转到Identity Inspector,它看起来像:

enter image description here

然后将元素添加到您需要的单元格中,例如我根据您的需要在单元格中添加了两个标签和一个按钮,单元格将如下所示:

enter image description here

之后,将该元素的插座连接到您的自定义调用,您的Custom tableview单元格类将是:

import UIKit

class TableViewCell: UITableViewCell {

    @IBOutlet weak var titleLbl: UILabel!
    @IBOutlet weak var DetailLabel: UILabel!
    @IBOutlet weak var btn: UIButton!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

现在,您可以在cellForRowAtIndexPath方法中使用自定义tableview单元格类创建自定义单元格:

let myCell = mytableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TableViewCell

您可以通过以下方式为其指定值:

myCell.titleLbl.text = carLocations[indexPath.row]
myCell.DetailLabel.text = "Detailed Text"
myCell.btn.tag = indexPath.row

最终的代码是:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let myCell = mytableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TableViewCell

    myCell.titleLbl.text = carLocations[indexPath.row]
    myCell.DetailLabel.text = "Detailed Text"
    myCell.btn.tag = indexPath.row

    return myCell
}

你的结果将是:

enter image description here

检查this示例以获取更多信息。

答案 3 :(得分:1)

Actually it is very easy: You just drag a UITableView into your view in the size you want. You add a prototype cell to it and then you customise that cell by dragging in labels, etc. You make a new class, which inherits from that UITableViewCell as explained earlier. You also connect the labels and buttons to the class as explained i the other answers. Apple has a very good explanation here Go to the section where they explain how to customise the cell.