使用 SJSegmented 后从其他视图控制器重新加载 Table 视图
Reload Table View From Other View Controller After with SJSegmented
我有第一个 viewcontroller,它包括一个分段控制器 (SJSegmented Controller)。它带有一个功能,我可以知道用户在哪个段并更改 php 加载另一个视图控制器的数据但是当我到达包含 table 视图的视图控制器时Viewdidload 和 Viewdidappear 只执行一次,在用户更改段后,不会加载 Viewdidload 和 Viewdidappear。
这是分段控制器的第一个视图控制器的代码。
func didMoveToPage(_ controller: UIViewController, segment: SJSegmentTab?, index: Int) {
if selectedSegment != nil {
selectedSegment?.titleColor(.gray)
}
if segments.count > 0 {
selectedSegment = segments[index]
}
// Checks witch segment the user is at and change the php to load accordingly
let CurrSeg = index
print(CurrSeg)
let Curr = String(CurrSeg)
if Curr == "0" {
UserDefaults.standard.set(“xyz.php”, forKey: "DealsPHP")
UserDefaults.standard.synchronize()
} else if Curr == "1" {
// UserDefaults.standard.set("hwy.php", forKey: "DealsPHP")
// UserDefaults.standard.synchronize()
} else if Curr == "2" {
UserDefaults.standard.set("uys.php", forKey: "DealsPHP")
UserDefaults.standard.synchronize()
} else if Curr == "3" {
UserDefaults.standard.set("wrt.php", forKey: "DealsPHP")
UserDefaults.standard.synchronize()
}
}
我想在执行 didMoveToPage 时重新加载另一个视图控制器的 table 视图。
第二个视图控制器的代码(包括 table 视图)
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
tableView.reloadData()
}
PS:执行 didMoveToPage 时它会更改 php 并使用更改后的 php.
加载相同的视图控制器
这是填充 table 视图的代码:
func get() {
let DealsPHP: String = (UserDefaults.standard.object(forKey: "DealsPHP") as? String)!
let url = URL(string: DealsPHP)
let data = try? Data(contentsOf: url!)
if data == nil {
// Create the alert controller
let alertController = UIAlertController(title: "No Internet Connection", message: "It looks like you aren't connected to the Internet. Please check your internet connection and try again.", preferredStyle: .alert)
// Create the actions
let okAction = UIAlertAction(title: "Try Again", style: UIAlertActionStyle.default) {
UIAlertAction in
self.get()
}
// Add the actions
alertController.addAction(okAction)
// Present the controller
self.present(alertController, animated: true, completion: nil)
} else {
self.values = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray
self.tableView.reloadData()
}
}
@sweepez 解决了这个问题。
我在 if Curr == "1" {} ** 添加了这段代码
**func didMoveToPage 这会在段更改时重新加载表视图的数据
let myController = controller as! YourControllerName
myController.get()
我有第一个 viewcontroller,它包括一个分段控制器 (SJSegmented Controller)。它带有一个功能,我可以知道用户在哪个段并更改 php 加载另一个视图控制器的数据但是当我到达包含 table 视图的视图控制器时Viewdidload 和 Viewdidappear 只执行一次,在用户更改段后,不会加载 Viewdidload 和 Viewdidappear。
这是分段控制器的第一个视图控制器的代码。
func didMoveToPage(_ controller: UIViewController, segment: SJSegmentTab?, index: Int) {
if selectedSegment != nil {
selectedSegment?.titleColor(.gray)
}
if segments.count > 0 {
selectedSegment = segments[index]
}
// Checks witch segment the user is at and change the php to load accordingly
let CurrSeg = index
print(CurrSeg)
let Curr = String(CurrSeg)
if Curr == "0" {
UserDefaults.standard.set(“xyz.php”, forKey: "DealsPHP")
UserDefaults.standard.synchronize()
} else if Curr == "1" {
// UserDefaults.standard.set("hwy.php", forKey: "DealsPHP")
// UserDefaults.standard.synchronize()
} else if Curr == "2" {
UserDefaults.standard.set("uys.php", forKey: "DealsPHP")
UserDefaults.standard.synchronize()
} else if Curr == "3" {
UserDefaults.standard.set("wrt.php", forKey: "DealsPHP")
UserDefaults.standard.synchronize()
}
}
我想在执行 didMoveToPage 时重新加载另一个视图控制器的 table 视图。
第二个视图控制器的代码(包括 table 视图)
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
tableView.reloadData()
}
PS:执行 didMoveToPage 时它会更改 php 并使用更改后的 php.
加载相同的视图控制器这是填充 table 视图的代码:
func get() {
let DealsPHP: String = (UserDefaults.standard.object(forKey: "DealsPHP") as? String)!
let url = URL(string: DealsPHP)
let data = try? Data(contentsOf: url!)
if data == nil {
// Create the alert controller
let alertController = UIAlertController(title: "No Internet Connection", message: "It looks like you aren't connected to the Internet. Please check your internet connection and try again.", preferredStyle: .alert)
// Create the actions
let okAction = UIAlertAction(title: "Try Again", style: UIAlertActionStyle.default) {
UIAlertAction in
self.get()
}
// Add the actions
alertController.addAction(okAction)
// Present the controller
self.present(alertController, animated: true, completion: nil)
} else {
self.values = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray
self.tableView.reloadData()
}
}
@sweepez 解决了这个问题。 我在 if Curr == "1" {} ** 添加了这段代码 **func didMoveToPage 这会在段更改时重新加载表视图的数据
let myController = controller as! YourControllerName
myController.get()