UIView里面的UITableViewCell位置问题 - UPDATED

时间:2015-11-30 19:57:22

标签: ios swift2 xcode7.1

这让我感到害怕..(.mov from my issue

我想将自定义视图放在自定义tableViewCell中。 制作这个简单的定位表达式: 如果:indexpath.row%2 == 0 --->设置左侧视图(如x:10,y:10) 其他:在右边。

当应用程序启动时,所有气泡都正好在彼此之下。当我向下滚动到最后,它重新定位自己。不是全部,而是其中一些。

我开始编写代码,但由于这个小小的东西,它还没有完成。我的代码如下:

TableViewController

class QuestionsTableViewController: UITableViewController {

    let c = "cell"
    var users = [User]()

    override func viewDidLoad() {
        super.viewDidLoad()
        for i in 0..<6 {
        let user = User(firstName: "\(i) Karl", lastName: "May")
            users.append(user)
        }
    }
    // MARK: - Table view data source

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return users.count ?? 0
    }


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

        let cell = tableView.dequeueReusableCellWithIdentifier(c, forIndexPath: indexPath) as! QuestionTableViewCell

          if indexPath.row % 2 == 0 {
        cell.bubleView.frame.origin =  CGPoint(x: origin.x + 10, y: origin.y + 10)
        cell.bubleView.backgroundColor = UIColor.blueColor()
    } else {
        cell.bubleView.frame.origin =  CGPoint(x: origin.x + 50, y: origin.y + 10)
        cell.bubleView.backgroundColor = UIColor.greenColor()
    }
        // Configure the cell...
        cell.nameLabel.text = users[indexPath.row].firstName + " " + users[indexPath.row].lastName

        return cell
    }
}

TableViewCell

class QuestionTableViewCell: UITableViewCell {

    @IBOutlet weak var bubleView: UIView!
    @IBOutlet weak var nameLabel: UILabel!

    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
    }

    func positionBuble() {
        bubleView.frame.origin = CGPoint(x: contentView.frame.origin.y+10, y: contentView.frame.origin.y+10)
    }
}

据我所知,这段代码应该有效,对吧?我在Xcode Utilites窗格上遗漏了什么吗? 我使用Xcode 7.1.1

screenshot from tableview

2 个答案:

答案 0 :(得分:4)

问题在于您错过了else

    if indexPath.row % 2 == 0 {
        let origin = cell.bounds.origin
        //cell.positionBuble()
        cell.bubleView.frame.origin =  CGPoint(x: origin.x + 10, y: origin.y + 10)
        cell.bubleView.backgroundColor = UIColor.blueColor()
    } else {
        // what????
    }

你需要这个,因为细胞被重复使用。 indexPath.row % 2 == 0将再次使用indexPath.row % 2 != 0的单元格,但您没有进行任何更改,因此它们最终都会看起来一样。

答案 1 :(得分:0)

因此,经过多次尝试后,我创建了另一个原型单元格,在其中设置了设计元素和运行时属性,然后调用了新单元格的标识符。虽然,仍然不知道为什么我的其他方法没有成功......

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> QuestionTableViewCell {
        var cella: QuestionTableViewCell!

        if indexPath.row % 2 == 0 { //c is an identifier String
            let cell = tableView.dequeueReusableCellWithIdentifier(c, forIndexPath: indexPath) as! QuestionTableViewCell
            cella = cell
        } else { //b is also
            let cell = tableView.dequeueReusableCellWithIdentifier(b, forIndexPath: indexPath) as! QuestionTableViewCell
            cella = cell
        }
        // Configure the cell...
        cella.nameLabel.text = users[indexPath.row].firstName + " " + users[indexPath.row].lastName
        //cella.tralala.blabla = ...other properties
        return cella
    }