私は被験者の質問音が複雑であることを知っています。私は問題を簡素化するために最善を尽くします。UITableViewCellがSwiftを使用して展開されていないときにもUIButton Imageを変更するにはどうすればよいですか?
私はUITableViewにUIButtonを持っています。 UITableViewCellは、UITableView用に構成されています。私はUIViewController内でUIButtonアクションを使用していますが、私は、単純に行の高さを変更し、いくつかの優先度の制約の操作でUITableViewCellsの崩壊/非展開を設定しました。アンコラップ処理が行われると、セルの下に追加情報が表示されます。これまでのところすべてが完璧に機能します。
UIButtonの折りたたみ既定の状態をクリックすると、UIButtonイメージが別のUIButtonイメージに変更されます。そして、UIButtonのuncollapseをクリックすると、最初のセルに戻ります。これは逆もまた同様です。だから、私は行の高さを変更するたびに推測している、UITableViewは、前に行った変更が表示されないようにセルを再作成します。ここで
は、関連するコードです:以下
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "FavCell", for: indexPath) as? FavCell else { return UITableViewCell() }
if let data = UserDefaults.standard.data(forKey: selectedCur),
let storedCurrencies = NSKeyedUnarchiver.unarchiveObject(with: data) as? [SelectedCurrency] {
selectedCurrencies = storedCurrencies
// SORT BY RANK
selectedCurrencies.sort(by: { $0.rank! < $1.rank! })
if selectedCurrencies.count > 0 {
// CATCH ANY NIL VALUES AND PREVENT APP CRASHES
let noVal = selectedCurrencies[indexPath.row].rank ?? 0
let nameVal = selectedCurrencies[indexPath.row].name ?? "N/A"
let symbolVal = selectedCurrencies[indexPath.row].symbol ?? "N/A"
cell.configureCell(no: "\(noVal)", name: nameVal, symbol: symbolVal)
}
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if collapseIndex == indexPath.row {
collapseIndex = -1
} else {
collapseIndex = indexPath.row
}
tableView.beginUpdates()
tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
tableView.endUpdates()
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if collapseIndex == indexPath.row {
return 280 // When collapsed cell view displayed - Number will be adjusted after
} else {
return 120 // Height of initial cell contents that fits
}
}
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
私はUIButtonsの画像を変更する方法です:
class NotificationBtn: UIButton {
var bellToggle = Int()
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if bellToggle == 1 {
self.transform = CGAffineTransform(scaleX: 1.25, y: 1.25) // Bounce
self.setImage(UIImage(named: "bell_off"), for: .normal)
UIView.animate(withDuration: 1.2, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 6, options: .allowUserInteraction, animations: { self.transform = CGAffineTransform.identity }, completion: nil)
curImg = self.image(for: .normal)!
bellToggle = 2
super.touchesBegan(touches, with: event)
} else {
self.transform = CGAffineTransform(rotationAngle: 25 * 3.14/180.0) // Rotate via 25 degree - Bell ringing animation
self.setImage(UIImage(named: "bell_on"), for: .normal)
UIView.animate(withDuration: 1.2, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 6, options: .allowUserInteraction, animations: { self.transform = CGAffineTransform.identity }, completion: nil)
curImg = self.image(for: .normal)!
bellToggle = 1
super.touchesBegan(touches, with: event)
}
}
}
はお時間をいただき、ありがとうございます。
'cellForRow'メソッドを表示できますか? – trungduc
要請が追加されました。 – sc13
このメソッドの 'configureCell'でボタンの画像を更新しましたか? – trungduc