gpt4 book ai didi

ios - 如何根据我在另一个 ViewController 中的信息更改插入到 TableCell 上的数组?

转载 作者:行者123 更新时间:2023-12-01 18:05:54 25 4
gpt4 key购买 nike

我需要你的帮助!我不知道如何根据我在另一个 ViewController 中的信息更改插入到 TableCell 上的数组。有点乱,但我会用我的代码向你展示。

在这里,我有一个 ViewController 符合许多开关,对应于不同类别的优惠券,这是代码:

class FiltersViewController: UIViewController {

@IBOutlet weak var restaurantsSwitch: UISwitch!

@IBOutlet weak var sportsSwitch: UISwitch!



override func viewDidLoad() {
super.viewDidLoad()
}

@IBAction func returnHome(_ sender: Any) {
let vc = self.storyboard!.instantiateViewController(withIdentifier: "home") as! HomeViewController
self.present(vc, animated: false, completion: nil)
}


@IBAction func restaurants(_ sender: UISwitch) {
if restaurantsSwitch.isOn == true{
tuxtlaSwitch.isOn = false
sevillaSwitch.isOn = false
coapaSwitch.isOn = false
coyoacanSwitch.isOn = false
universidadSwitch.isOn = false
polancoSwitch.isOn = false
}
}

@IBAction func sports(_ sender: UISwitch) {
if sportsSwitch.isOn == true{
tuxtlaSwitch.isOn = false
sevillaSwitch.isOn = false
coapaSwitch.isOn = false
coyoacanSwitch.isOn = false
universidadSwitch.isOn = false
polancoSwitch.isOn = false
}
}

}

我在示例中只向您展示了两个开关,目的是不要用很多代码填充它,但是大约有 15 个开关。

而在另一个与此连接的 ViewController 中,HomeViewController 包含来自 JSON 的优惠券,并符合 TableViewCell 上显示的十个项目的数组,代码:
class HomeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var data : NSArray = []

var mainData : NSArray = []

var couponsImg : [UIImage] = []

var couponsTitle : [String] = []

var couponsDesc : [String] = []

var couponsCat : [String] = []



func getCoupons(){

let miURL = URL(string: RequestConstants.requestUrlBase)

let request = NSMutableURLRequest(url: miURL!)

request.httpMethod = "GET"

if let data = try? Data(contentsOf: miURL! as URL) {

do {

let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? NSDictionary

let parseJSON = json

let object = parseJSON?["object"] as! NSDictionary

let mainCoupon = object["mainCoupon"] as! NSArray

let coupons = object["coupons"] as! NSArray

self.mainData = mainCoupon

self.data = coupons

self.couponImg1 = (mainCoupon[0] as AnyObject).value(forKey: "urlImage") as! String

self.couponImg2 = (mainCoupon[1] as AnyObject).value(forKey: "urlImage") as! String

self.couponTitle1 = (mainCoupon[0] as AnyObject).value(forKey: "nameStore") as! String

self.couponTitle2 = (mainCoupon[1] as AnyObject).value(forKey: "nameStore") as! String

self.couponDesc1 = (mainCoupon[0] as AnyObject).value(forKey: "promoDescription") as! String

self.couponDesc2 = (mainCoupon[1] as AnyObject).value(forKey: "promoDescription") as! String

self.couponCat1 = (mainCoupon[0] as AnyObject).value(forKey: "category") as! String

self.couponCat2 = (mainCoupon[1] as AnyObject).value(forKey: "category") as! String

self.couponsImg = [couponImage1!, couponImage2!, couponImage3!, couponImage4!, couponImage5!, couponImage6!, couponImage7!, couponImage8!, couponImage9!, couponImage10!]

self.couponsTitle = [couponTitle1, couponTitle2, couponTitle3, couponTitle4, couponTitle5, couponTitle6, couponTitle7, couponTitle8, couponTitle9, couponTitle10]

self.couponsDesc = [couponDesc1, couponDesc2, couponDesc3, couponDesc4, couponDesc5, couponDesc6, couponDesc7, couponDesc8, couponDesc9, couponDesc10]

self.couponsCat = [couponCat1, couponCat2, couponCat3, couponCat4, couponCat5, couponCat6, couponCat7, couponCat8, couponCat9, couponCat10]

} catch {

let error = ErrorModel()

error.phrase = "PARSER_ERROR"

error.code = -1

error.desc = "Parser error in get Notifications action"

}

}

}



@IBAction func showFilters(_ sender: Any) {

let vc = self.storyboard!.instantiateViewController(withIdentifier: "filters") as! FiltersViewController

self.present(vc, animated: false, completion: nil)

}



func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! HomeTableViewCell

cell.couponImg.image = couponsImg[indexPath.row]

cell.couponTitle.text = couponsTitle[indexPath.row]

cell.couponDescription.text = couponsDesc[indexPath.row]

cell.couponCategory.text = couponsCat[indexPath.row]

return cell

}

(再一次,我只给你展示了两张优惠券的例子)。问题是我需要对 TableCell 上的优惠券应用一些过滤器。第一次出现 View 时,它正确显示了 10 张优惠券,但是当我转到过滤器并将其中的一些打开时,它并没有什么不同,我尝试使用的方法是这样的,首先有一个FiltersViewController 类的实例:
var filters = FilterViewController()

if filters.isMovingToParentViewController == true {
if filters.restaurantsSwitch.isOn == false {
self.couponsImg.remove(at: 0)
self.couponsImg.remove(at: 1)
self.couponsImg.remove(at: 2)
}

if filters.sportsSwitch.isOn == false {
self.couponsImg.remove(at: 3)
self.couponsImg.remove(at: 4)
self.couponsImg.remove(at: 5)
}
}

在下面的示例中,我想说如果关闭餐厅,我将删除餐厅类别的相应优惠券,与体育开关相同。但首先我不知道在哪里包含这个逻辑,在哪个方法中?而且我不知道这条指令是否适合我的目的。有人可以帮帮我吗???

最佳答案

您的逻辑不起作用,因为您正在实例化一个新的 FilterViewController,与与您的屏幕关联的 FilterViewController 不同。

您可以使用委托(delegate)解决此问题。

首先,创建委托(delegate):

protocol FilterDelegate {
func updateTable() }

然后,在您的 FilterViewController 中添加以下行:
weak var delegate:FilterDelegate?

您的 HomeViewController 必须符合此委托(delegate),因此:

类 HomeViewController: FilterDelegate ... {
func updateTable() {
/* GET THE DATA FILTERED HERE */
tableview.reloadData()
}

在您的 FilterViewController 中:
   @IBAction func returnHome(_ sender: Any) {
let vc = self.storyboard!.instantiateViewController(withIdentifier: "home") as! HomeViewController
self.delegate = vc
self.present(vc, animated: false, completion: nil)
delegate?.updateTable()
}

我认为这应该有效。

编辑:

另一种方法是在这两个 vcs 之间创建一个 segue,并使用“准备”功能传递哪些过滤器处于事件状态。然后,您可以在 HomeVC 中获取此信息,并根据 viewDidLoad 函数中的过滤器加载表。

1 - 创建一个对象过滤器:
class Filters {
var tuxtlaSwitchIsOn: Bool
var sevillaSwitchIsOn: Bool
...
init(tuxtlaSwitchIsOn: Bool, sevillaSwitchIsOn: Bool, ...) {
self.tuxtlaSwitchIsOn = tuxtlaSwitchIsOn
self.sevillaSwitchIsOn = sevillaSwitchIsOn
...
}
}

2 - 将属性过滤器添加到您的 HomeVC
class HomeViewController : ... {
...
var filtersActive: Filters?
...
}

3 - 在您的 FilterViewController 中实例化一个 Filter 对象,指示哪些过滤器处于打开状态

4 - 在您的 FilterViewController 中准备乐趣,将 Filter 对象传递给 HomeVC

5 - 在您的 HomeVC 中,获取 Filter 对象并根据它过滤您的数据。

关于ios - 如何根据我在另一个 ViewController 中的信息更改插入到 TableCell 上的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44830209/

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