참고 :이 게시물은 다시 게시 된 것입니다. 며칠 전에 sans-code와 같은 질문을 올렸습니다. 일부 관련 스 니펫을 추가하기 위해 질문을 편집했지만 질문이 다시 열리지 않았으므로 여기서 다시 게시합니다. 이것이 적절한 방법이 아니라면 알려주십시오!프로그래밍 방식으로 UITableView 컨트롤에서 전환하십시오.
두 가지 모드가있는 응용 프로그램이 있으며 각 모드 (하나의 추가 섹션 하나, 행 수 차이, 다른 UserDefaults 키 등)마다 설정 화면이 약간 다릅니다. 과거에는 switch와 if 문을 사용하여 이것을 구현했지만 더 보수적으로 만들려고 노력하면서 두 모드를 별도의 클래스로 분리하는 방법을 조사했습니다. 처음에는 두 개의 개별 하위 클래스를 만드는 것을 고려했지만 스토리 보드 등에서 어떻게 작동하는지 생각하는 데 어려움을 겪고있었습니다. 나는 두 개의 별개의 서브 클래스 인 UITableView
을 사용하여 모드를 기반으로 보여줄 서브 클래스를 viewDidLoad
으로 선택하려고했습니다.
그러나이 방법에 문제가 있습니다. 컨트롤러의 cellForRow
메서드가 TableView의 cellForRow
메서드를 호출하도록 설정 했으므로 문제가 발생합니다. dequeueReusableCell
을 시도 할 때 앱이 그 라인에서 애매한 "EXC_BAD_INSTRUCTION
"오류로 인해 충돌합니다.
여기에 몇 가지 관련 코드는 다음과 같습니다
ViewController.swift
...
override func viewDidLoad()
{
super.viewDidLoad()
...
tableView = SRScaleSettingsTableView()
}
...
override func tableView(_ tableView: UITableView?, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
return (tableView?.cellForRow(at: indexPath))!
}
SRScaleSettingsTableView.swift
override func cellForRow(at indexPath: IndexPath) -> UITableViewCell?
{
...
switch indexPath.section
{
case 0:
...
let switchCell = dequeueReusableCell(withIdentifier: "SwitchCell") as! SRSwitchCell
^Debugger breaks on that line with EXC_BAD_INSTRUCTION
...
return switchCell
...
}
}
어떤 아이디어이를 원인이 무엇에? 나의 접근법조차 정확한가? 이 작업을 수행하는 더 좋은 방법이 있습니까? 감사!