私は、2つのtableViews(upcomingTableViewとpastTransactionsTableView)を切り替えるsegmentedControlを持つticketsVCを持っています。これらの2つのtableViewは別々のファイルに作成されます。私は押して/テーブルビューから新しいVCを提示したいが、残念ながら私はこれらのtableViewsからnavigationControllerまたはpresentVCにアクセスすることはできません。Separated UITableViewからViewControllerをプッシュ/プレゼンテーション
マイようなアプローチ:このアプローチを採用する
class TicketsViewController: UIViewController {
let segmentedControllerView: SegmentedController = {
let sc = SegmentedController()
sc.translatesAutoresizingMaskIntoConstraints = false
sc.segmentedController.addTarget(self, action: #selector(segmentedControlValueChanged), for: .valueChanged)
sc.segmentedController.selectedSegmentIndex = 0
return sc
}()
let upcomingTableView: UpcomingTableView = {
let tv = UpcomingTableView(frame: .zero, style: .grouped)
tv.translatesAutoresizingMaskIntoConstraints = false
return tv
}()
let pastTransactionsTableView: PastTransactionsTableView = {
let tv = PastTransactionsTableView(frame: .zero, style: .grouped)
tv.translatesAutoresizingMaskIntoConstraints = false
return tv
}()
override func viewDidLoad() {
super.viewDidLoad()
//setupNavigationBar()
//setupViews()
}
@objc func segmentedControlValueChanged(_ sender: UISegmentedControl) {
let segmentedControl = sender
if segmentedControl.selectedSegmentIndex == 0 {
upcomingTableView.isHidden = false
pastTransactionsTableView.isHidden = true
} else {
upcomingTableView.isHidden = true
pastTransactionsTableView.isHidden = false
}
}
//Both UpcomingTableView and PastTransactionsTableView
//are created similar as below
class UpcomingTableView: UITableView {
override init(frame: CGRect, style: UITableViewStyle) {
super.init(frame: frame, style: style)
delegate = self
dataSource = self
register(CustomCell.self, forCellReuseIdentifier: "cell")
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension UpcomingTableView: UITableViewDataSource, UITableViewDelegate {
//all the neccessary dataSource and delegate functions
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vc = TicketsViewController()
vc.present(UIViewController(), animated: true, completion: nil)
//This method cannot access TicketsVC
}
}
私の理由はupcomingTableViewとpastTransactionsTableView両方が非常に異なる細胞を示し、別のモデルを引くことです。誰も私がどのようにこれらのtableViews自体から新しいVCをプッシュ/プレゼンテーションすることができる任意のアドバイスを持っていますか?
ちょうど私がself.presentingビュー –
@HarshalBhavsarを提示する方法をdidselect使用して、それがコードを追加内部@HarshalBhavsar私はすでにチェックしている、メソッドにアクセスすることはできません。 – Koh
チェックから' navigationController?.pushViewController() 'や' present'にアクセスすることはできません新しいVC –