UITabBar内のすべてのView Controllerに分割されたUITableViewを更新したいとします。ビューコントローラ内でボタンが押されたときにテーブルビューの内容を更新することは可能ですか?私はテーブルビューにセグをしたくないだけで、それを更新し続けます。テーブルビューのロジックはArrayで動作するので、外部ビューコントローラクラスからも更新できる必要があります。別のView ControllerのUIボタンからUITableViewを更新する
1
A
答えて
1
はい、絶対に - 限り、あなたはのUITableViewへの参照を持っているとして、あなたは、単に呼び出すことができます。
tableView.reloadData()
EDIT
を申し訳ありませんが、私は質問を誤解しました。上記は複数のView Controllerでも有効ですが、別のView Controllerのビューにアクセスするのは悪い習慣です。たとえば、クラスViewController1
とクラスTableViewController1
があるとします。良い練習には次のようなものがあります:
class ViewController1: UIViewController {
private var tableView: UITableView!
func reloadTableView() {
self.tableView.reloadData()
}
}
class ViewController2: UIViewController {
func doStuff() {
// some reference to instance of first view controller
let vc = ViewController1()
// Do something that requires table view to be reloaded
vc.reloadTableView()
}
}
希望すると便利です。
EDIT 2
私は実装がUITabBarControllerを希望するものに追加しました:
class MyTabBarController: UITabBarController {
var tableVC: MyTableViewController1?
var vc2: ViewController2?
override func viewDidLoad() {
super.viewDidLoad()
self.tableVC = self.storyboard?.instantiateViewControllerWithIdentifier("table vc storyboard id") as? MyTableViewController1
self.vc2 = self.storyboard?.instantiateViewControllerWithIdentifier("vc2 storyboard id") as? ViewController2
if let vc1 = self.tableVC,
let vc2 = self.vc2 {
self.viewControllers?.append(vc1)
self.viewControllers?.append(vc2)
}
}
}
class MyTableViewController1: UIViewController {
private var tableView: UITableView!
private var myArray: [AnyObject]!
func reloadTableView() {
self.tableView.reloadData()
}
func addToArray(anObject: AnyObject) {
self.myArray.append(anObject)
}
}
class ViewController2: UIViewController {
var vc2: MyTableViewController1?
func doStuff() {
// Do something that requires table view to be reloaded
vc2?.addToArray(someObject)
vc2?.reloadTableView()
}
}
2
あなたは別のView Controllerのビューを変更しようとするべきではありません。これはオブジェクト指向プログラミングの重要な原則であるカプセル化の原則に違反します。
他のView Controllerが呼び出せるメソッドを追加する必要があります。
テーブルビューのモデルとして機能する配列が更新されていることを確認し、他のビューコントローラにメッセージを送信して、テーブルビューを更新するように指示します。
テーブルビューを含むビューコントローラは、応答としてテーブルビューにreloadData()
を呼び出すだけです。
+0
それは良い点です! – Jason
関連する問題
- 1. ストーリーボードのサブビュー(別のView Controller)内のボタンから新しいView Controllerをプッシュするには
- 2. コンテナビュー内の別のView ControllerからView Controllerをロードする
- 3. セルラベルを別のクラス(View Controller)から変更する方法は?
- 4. 1つのView Controllerから別のView ControllerにUI ImageViewを渡す方法は? swift 3
- 5. 1つのView Controllerから別のView Controllerへデータを渡す方法
- 6. Swift View Controller with UITableViewセクション
- 7. 別のView ControllerでView Controllerを起動する方法は?
- 8. View Controller NIBを別のView Controllerに追加する
- 9. 別のView Controllerに戻って別のView Controllerに転送する方法
- 10. 別のView ControllerでUITextFieldとUITableViewの間でデータを送信する
- 11. Swift:ユーザーがTableviewセルをタップすると、あるView Controllerから別のView Controllerへデータをシフトする方法
- 12. View Controllerから別のView Controllerに時間を転送するにはどうすればいいですか?
- 13. iOSでappdelegateから別のView Controllerを表示するには
- 14. 別のクラスの別のスレッドからUIを更新する
- 15. UILabelのテキストを他のView Controllerから変更する
- 16. UITableViewを更新するセルのクラスから更新する
- 17. ユーザーが別のView Controllerにログインした後、Main View Controllerをリフレッシュする
- 18. DetailViewControllerから別のView ControllerにCore Dataオブジェクトを渡す
- 19. CollectionViewCellから別のView ControllerへSegueを渡すIndexPath
- 20. View Controllerから別のクラス(ビューなし)を呼び出す
- 21. PopOver View Controllerのサイズを変更する
- 22. UIImageを別のView Controllerに渡す
- 23. View ControllerからView ControllerにFirebaseデータを送信
- 24. 別のView Controllerから変数にアクセスします。 Swift
- 25. 別のView Controllerクラスからの配列へのアクセス
- 26. 別のクラスの別のView Controllerから関数を呼び出す方法
- 27. モーダルからView Controllerを解除する
- 28. Swift 3の別のプロジェクトからView Controllerにアクセス
- 29. どのようにUIからのMainStoryBoardのView Controllerを呼び出すcellView xib
- 30. 別のView ControllerをUITabBarControllerビューにプッシュ
お返事ありがとうございます。すばやく別のクラスからUITableViewへの参照を取得するにはどうすればよいですか? – user3776662
私の編集した回答を参照してください - これは役に立ちますか? – Jason
はい、これは間違いなく役に立ちますが、唯一のことは、最初のView Controllerへの参照を作成しようとするとエラーが発生していることです。 "let vc = ViewController1()" Xcodeは私に叫んで何らかの理由でエラーを投げています。何か案は? – user3776662