这让我感到害怕..(.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
答案 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
}