使用功能tableView
时出现问题。我给你看我的代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cardCell", for: indexPath) as! OpsCardCell
cell.workTest(drawCard: .selectOpponent)
return cell
}
在示例中,我有4个单元格,当我在模拟器中滚动时,屏幕外的单元格又返回,则再次调用该单元格。由于我是动态绘制卡片,因此卡片被绘制了几次,而阴影增加了太多次。我向您展示了之前和之后的屏幕:
几次向下滚动并向上滚动:
这是因为函数tableView多次调用了单元格[0]
和[3]
这是我提取卡片的代码:
func drawBasiqCard(){
let cardView = UIView()
self.addSubview(cardView)
cardView.frame = CGRect(marginCardWidth,
marginCardHeight,
self.bounds.size.width - (marginCardWidth*2),
self.bounds.size.height - (marginCardHeight*2))
cardView.layer.cornerRadius = 10
let rounding = CGFloat.init(10)
let shadowLayer = CAShapeLayer.init()
shadowLayer.path = UIBezierPath.init(roundedRect: cardView.bounds, cornerRadius: rounding).cgPath
shadowLayer.fillColor = UIColor(rgb: 0xaaccbb).cgColor
shadowLayer.shadowPath = shadowLayer.path
shadowLayer.shadowColor = UIColor.black.cgColor
shadowLayer.shadowRadius = 5
shadowLayer.shadowOpacity = 0.2
shadowLayer.shadowOffset = CGSize.init(width: 0, height: 0)
cardView.layer.insertSublayer(shadowLayer, at: 0)
}
所以我的问题是,我的代码有什么问题?还有另一种解决我的问题的方法吗?
感谢您的回复!
答案 0 :(得分:3)
您应该尝试在awakefromnib方法中一次添加子层。 Tableviewcell使用单元格标识符重复使用同一单元格,这就是为什么要将多个阴影添加到您的单元格的原因。
答案 1 :(得分:1)
您的问题是电池回收。滚动时,将重复使用同一单元格以在不同的indexPath上显示数据。
您应该创建UITableViewCell的自定义子类。给它一个可选的属性shadowLayer
。在您的cellForRow(at:)
方法中,使单元出队并将其强制转换为正确的自定义类。然后检查其shadowLayer
属性是否为nil。如果为零,则添加阴影层。如果不是零,请创建一个阴影层并将其安装在单元格(cell.shadowLayer = shadowLayer
)中。
答案 2 :(得分:1)
在您的代码中,每次调用该纸牌抽奖方法时都已获取了一张新纸牌,因此该方法第一次可以正常使用,但是此后会产生问题,因为您尚未删除该视图或未选中该卡是否已添加到单元格中。
因此,如果要使用xib或情节提要来设计单元格,则可以从代码中删除以下行,并采用一个父视图来设计情节提要或xib内的卡片。
let cardView = UIView()
或者,如果您要以编程方式设计单元格,则首先检查是否在单元格中添加了cardview
,然后没有添加cardview
,然后添加了新代码,请跳过该代码。 / p>
答案 3 :(得分:1)
所以我添加到班级顶部:
$query = $db->query("SELECT * FROM people WHERE first_name = :first_name");
$statement = $db->prepare($query);
$statement->execute();
$count = $statement->fetchColumn();
if ($count === 1)
{
echo "First name Exist";
}
else
{
$query = "INSERT INTO people (first_name, last_name) VALUES (:first_name, :last_name)";
for($count = 0; $count<count($_POST['hidden_first_name']); $count++)
{
$data = array(
':first_name' => $_POST['hidden_first_name'][$count],
':last_name' => $_POST['hidden_last_name'][$count]
);
$statement = $db->prepare($query);
$statement->execute($data);
}
}
我比较private var ShadowLayerCard: CAShapeLayer?
不是ShadowLayerCard
的情况:
nil
这可以解决我的问题,这要感谢duncan-c