gpt4 book ai didi

ios - Swift Segmented Control Change Index Event,TableView 不更新

转载 作者:行者123 更新时间:2023-11-28 15:19:30 25 4
gpt4 key购买 nike

我想根据分段控件的更改从 Web 服务更新 TableView 。作为我的代码,我触发了事件 segmentedControlAction 以更新 viewDidAppear 事件中的 tableview。 它第一次在屏幕加载时工作,但在我选择下一个选项卡(以下)时不工作,它从 Web 服务获取数据而不更新 TableView 。但是当我切换到第一个“关注者”选项卡然后再次切换到“关注者”选项卡时它起作用了,因为它存储从以前的网络服务获取的数据

  • Datasource(ds) 是从网络服务获取数据,如果它没有记录的话

  • TsButton 是自定义类,只有一个成员变量是object,用于传递额外信息给按钮点击事件

在 StoryBoard 中有两个控件 Segmented Control 和 tableview 就像在屏幕截图中一样

enter image description here

我的代码在下面

class UserFollowController: BaseViewController
{
@IBOutlet var segmentedControl: UISegmentedControl!

@IBOutlet var tableView: UITableView!

private var ds : UserFollowTableDataSource!

override func viewDidLoad()
{
super.viewDidLoad()

ds = UserFollowTableDataSource(vc: self, tableView: tableView);
}

override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)

if UserEntity.instance.username.characters.count == 0
{
let storyBoard : UIStoryboard = UIStoryboard(name:"Main", bundle:nil)

let vc = storyBoard.instantiateViewController(withIdentifier: "LoginController") as! LoginController

self.tabBarController?.selectedIndex = 0
self.present(vc, animated: true, completion: nil)
}
else
{
self.segmentedControlAction(sender: nil);
}

}

@IBAction func segmentedControlAction(sender: AnyObject?) {

if(segmentedControl.selectedSegmentIndex == 0)
{
ds.fetchFromWeb(type: "follower")
}
else
{
ds.fetchFromWeb(type: "following")
}
}
}


class UserFollowTableDataSource : NSObject, UITableViewDataSource
{
private var follower_records : [[String : Any]]?;
private var following_records : [[String : Any]]?;
private var records : [[String : Any]]?;

private var tableView : UITableView!;
private var vc : UserFollowController!;
private var loader : UIAlertController!;
private var type : String!

init(vc : UserFollowController, tableView : UITableView)
{
self.vc = vc;
self.tableView = tableView
self.loader = CommonUtil.getLoader(msg: "Getting List...");

super.init()

self.tableView.dataSource = self;
}

public func fetchFromWeb(type : String)
{
self.type = type;

self.loader.title = "Getting List...";

if (type == "follower")
{
if let data = self.follower_records
{
self.records = data;
self.tableView.reloadData();
self.tableView.setNeedsDisplay();
return;
}

self.vc.present(self.loader, animated: true, completion: nil)

HauteWebService.instance.get_user_followers(onSucess: { (response) in

if (response.status == 1)
{
DispatchQueue.main.async {

self.loader.dismiss(animated: true, completion: {
self.follower_records = response.data as! [[String : Any]]
self.records = self.follower_records
self.tableView.reloadData();
});

}
}
else
{
self._onError(msg: response.msg);
}

}, onFailure: { (msg) in

self._onError(msg: msg);
})
}
else
{
if let data = self.following_records
{
self.records = data;
self.tableView.reloadData();
self.tableView.setNeedsDisplay();
return;
}

self.vc.present(self.loader, animated: true, completion: nil)

HauteWebService.instance.get_user_following(onSucess: { (response) in

if (response.status == 1)
{
DispatchQueue.main.async {

self.loader.dismiss(animated: true, completion: {
self.following_records = response.data as! [[String : Any]]
self.records = self.follower_records
self.tableView.reloadData();
})
}

}
else
{
self._onError(msg: response.msg);
}

}, onFailure: { (msg) in

self._onError(msg: msg);
})
}
}

private func _onError(msg : String)
{
DispatchQueue.main.async {
self.loader.dismiss(animated: true, completion: {
let alert = CommonUtil.getAlertError(title: "Error while getting web service", msg: msg);
self.vc?.present(alert, animated: true, completion: nil)
})
}
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

if self.records != nil
{
return self.records!.count;
}

return 0;
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "FollowTableCell", for: indexPath) as! FollowTableCell

let index = indexPath.row;

cell.tag = index;
if let record = self.records![index] as? [String : Any]
{
let first = record["firstname"] as! String
let last = record["lastname"] as! String

cell.lblName.text = first + " " + last;

var add = record["city"] as! String;
let state = record["state"] as! String;

if state != ""
{
add = add + ", " + state
}

cell.lblAddress.text = add;
cell.btnFollow.backgroundColor = TFColor.hexToUIColor(hex: "#AAAAAA")
cell.btnFollow.setTitle("Follow", for: .normal)

cell.btnFollow.object = record;
if let v = record["is_followed"] as? Int
{
if (v == 1)
{
cell.btnFollow.backgroundColor = TFColor.hexToUIColor(hex: "#887474")
cell.btnFollow.setTitle("Following", for: .normal)
}
}

cell.btnFollow.addTarget(self, action: #selector(self.btnFollowClick), for: .touchUpInside)

cell.ratingStar.changeEvent = false;
if let v = Float(record["rating"] as! String)
{
cell.ratingStar.rating = Int(v)
}
else
{
cell.ratingStar.rating = 0;
}

cell.imgProfile.image = UIImage(named: "no_image");

if let url = record["profile_image_url"] as? String
{
if let img = ImageEntity.readCache(key: url)
{
cell.imgProfile.image = img
}
else
{
HauteWebService.instance.downloadFile(url: url, onSucess: { (data) in

if let img = UIImage(data: data)
{
ImageEntity.writeCache(key: url, image: img)

DispatchQueue.main.async {
if cell.tag == index
{
cell.imgProfile.image = img
}
}
}

}, onFailure: { (msg) in

})
}
}
}

return cell;
}

@objc func btnFollowClick(_ sender: TsButton)
{
let record = sender.object as! [String : Any];

let id = record["id"] as! String;

let data = ["user_id" : id]

if let v = record["is_followed"] as? Int
{
self.loader.title = "Please Wait...";

vc.present(self.loader, animated: true, completion: nil);

if (v == 1)
{
HauteWebService.instance.delete_user_follow(data: data, onSucess: { (response) in

if (response.status == 1)
{
DispatchQueue.main.async {
self.loader.dismiss(animated: false, completion: {
DispatchQueue.main.async {
self.follower_records = nil
self.following_records = nil
self.fetchFromWeb(type : self.type)
}
});
}
}
else
{
self._onError(msg: response.msg)
}

}, onFailure: { (msg) in

self._onError(msg: msg);
})
}
else
{
HauteWebService.instance.save_user_follow(data: data, onSucess: { (response) in

if (response.status == 1)
{
DispatchQueue.main.async {
self.loader.dismiss(animated: false, completion: {
DispatchQueue.main.async {
self.follower_records = nil
self.following_records = nil
self.fetchFromWeb(type : self.type)
}
});
}
}
else
{
self._onError(msg: response.msg)
}

}, onFailure: { (msg) in

self._onError(msg: msg);
})
}
}
}
}


class FollowTableCell : UITableViewCell
{
@IBOutlet var imgProfile : UIImageView!

@IBOutlet var actvityImgProfile : UIActivityIndicatorView!

@IBOutlet var lblName : UILabel!

@IBOutlet var lblAddress : UILabel!

@IBOutlet var btnFollow : TsButton!

@IBOutlet var ratingStar : TsRatingStar!
}

最佳答案

在您的以下网络服务回调中,您有

self.following_records = response.data as! [[String : Any]]
self.records = self.follower_records

因此您在网络服务回调中将 tableView 的记录设置为错误的值。

应该是:

self.following_records = response.data as! [[String : Any]]
self.records = self.following_records

关于ios - Swift Segmented Control Change Index Event,TableView 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46271674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com