如何使用Swift以编程方式创建多个UITableView?

时间:2016-11-29 21:25:11

标签: ios swift uitableview tableview

您好我正在尝试使用一个包含两个tableView的页面构建一个应用程序。我试图通过标签区分它们,但它们不能很好地协同工作,所以我想得到一些帮助。我以编程方式完成了这一切,因此没有IBOutlet。 下面是为便于阅读而修改的代码。感谢。

class test: UIViewController,UITableViewDataSource, UITableViewDelegate {

var ingredientItems = 3
var stepItems = 3

let ingredientsTableView: UITableView = {
    let tv = UITableView()
    tv.tag = 101
    tv.translatesAutoresizingMaskIntoConstraints = false
    return tv
}()

let stepsTableView: UITableView = {
    let tv = UITableView()
    tv.tag = 102
    tv.translatesAutoresizingMaskIntoConstraints = false
    return tv
}()

override func viewDidLoad() {

    super.viewDidLoad()

    ingredientsTableView.delegate = self
    ingredientsTableView.dataSource = self
    ingredientsTableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")

    stepsTableView.delegate = self
    stepsTableView.dataSource = self
    stepsTableView.register(UITableViewCell.self, forCellReuseIdentifier: "stepscell")

    view.addSubview(ingredientsTableView)
    view.addSubview(stepsTableView)

    setupIngredientsTableView()//just setting up anchors
    setupStepsTableView()//just setting up anchors

}
    func setupIngredientsTableView() {
    //Constraints :  need x,y, width and height
    ingredientsTableView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
    ingredientsTableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 100).isActive = true
    ingredientsTableView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -24).isActive = true
    ingredientsTableView.heightAnchor.constraint(equalToConstant: 200).isActive = true
}

func setupStepsTableView() {
    //Constraints :  need x,y, width and height
    stepsTableView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
    stepsTableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 350).isActive = true
    stepsTableView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -24).isActive = true
    ingredientsTableView.heightAnchor.constraint(equalToConstant: 200).isActive = true
}
//
// table view
//
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if tableView.tag == 101{
        return self.ingredientItems
    }else{
        return self.stepItems
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if tableView.tag == 101{

        tableView.rowHeight = 30.0
        let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell
        cell.textLabel?.text = String(describing: indexPath)

        return cell

    }else{

        tableView.rowHeight = 30.0
        let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "stepscell")! as UITableViewCell
        cell.textLabel?.text = "test"
        return cell
    }
}    

}

1 个答案:

答案 0 :(得分:2)

你刚在setupStepsTableView函数中输入了一个拼写错误,你设置了ingredientsTableView的高度锚,而不是stepsTableView(我把** **)

func setupStepsTableView() {
//Constraints :  need x,y, width and height
stepsTableView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
stepsTableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 350).isActive = true
stepsTableView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -24).isActive = true
**ingredientsTableView.heightAnchor.constraint(equalToConstant: 200).isActive = true**

}

相反你应该拥有它

stepsTableView.heightAnchor.constraint(equalToConstant: 200).isActive = true

只要正确设置tableViews的委托和数据,在一个UIViewController类中有两个表视图是没有问题的。我也看到你的标签正常工作。您的代码工作正常,请查看结果。

enter image description here