UITableViewCell에 추가한 SwiftUI 버튼이 반응하지 않음
아래와 같이 버튼만 배치되어 있는 간단한 화면을 작성합니다.
import UIKit
import SwiftUI
class ViewController: UIViewController {
@IBOutlet private weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
}
extension ViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")
let view = ButtonView()
let hostingController = UIHostingController(rootView: view)
cell.addSubview(hostingController.view)
hostingController.view.translatesAutoresizingMaskIntoConstraints = false
hostingController.view.heightAnchor.constraint(equalToConstant: 320).isActive = true
hostingController.view.bottomAnchor.constraint(equalTo: cell.bottomAnchor, constant: 16).isActive = true
hostingController.view.topAnchor.constraint(equalTo: cell.topAnchor, constant: 16).isActive = true
hostingController.view.leftAnchor.constraint(equalTo: cell.leftAnchor, constant: 16).isActive = true
hostingController.view.rightAnchor.constraint(equalTo: cell.rightAnchor, constant: -16).isActive = true
hostingController.view.centerYAnchor.constraint(equalTo: cell.centerYAnchor).isActive = true
cell.selectionStyle = .none
return cell
}
}
●ButtonView
struct ButtonView: View {
var body: some View {
HStack {
Spacer()
VStack(alignment: .leading) {
Spacer()
Button(action: {
print("タップ")
}) {
Text("ボタン")
.foregroundColor(Color(.blue))
.font(.system(size: 14))
.padding([.leading, .trailing], 20)
.overlay(
RoundedRectangle(cornerRadius: 14)
.strokeBorder(Color(.blue), lineWidth: 1)
)
}
Spacer()
}
Spacer()
}
}
}
「Debug View Hierarchy」로 계층을 보면 다음과 같이 되어 있었습니다.
버튼 위에 contentView가 타고 버리고 있습니다.
이것은 cell.addSubview로 하는 것이 문제였고, 올바르게는 cell.contentView.addSubview로 해야 했습니다.
OS에 따라 거동이 다른 것 같습니다만, 확실히 보면 알기 어렵기 때문에 비망록으로서 남겨 둡니다.
Reference
이 문제에 관하여(UITableViewCell에 추가한 SwiftUI 버튼이 반응하지 않음), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/suda_yuji/items/b023f7fab6a708d66741텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)