Swift3:为条件单元格从主 VC 调用 func 数据到 TableVC

Posted

技术标签:

【中文标题】Swift3:为条件单元格从主 VC 调用 func 数据到 TableVC【英文标题】:Swift3: Call func data from main VC to TableVC for conditional cells 【发布时间】:2017-07-12 18:44:50 【问题描述】:

我正在尝试将我的主视图控制器 (func getCityWeatherData) 中的一个函数扩展到下面的类,该类仅在某些条件下显示设置项。

我还标记了需要选择一些标准的示例数据 - 我如何将它们与通常的数组分开?我试过我在其他地方读到的东西,在 numberOfRowsAt 部分,但我很困惑。

class ProductRecsTableViewController: UITableViewController 

//Mark: Properties

var products = [Product]()

override func viewDidLoad() 
    super.viewDidLoad()

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int 
    return 1


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    if getCityWeatherData.humidity < 50 
        return productsHumidity.count
     else 
    return products.count
     

这是我创建的示例单元格 - 我想要“天气:...”,但要定义项目何时显示。

guard let prod1 = Product(name: "XXX", photo: photo1, rating: 1, weather: "Humidity")

【问题讨论】:

比较混乱,请再详细说明问题 @D4ttatraya 我在ViewController 中有来自天气API 的数据,但我还需要在ProductRecsTableViewController 中访问它。我该怎么做 @J.M.您应该考虑将对天气 API 的访问分离到它自己的模型对象中。如果您将实际访问 API 数据的所有繁重工作都放在了那里,那么您可以执行let weatherApi = WeatherApi(), let currentWeather = weatherApi.getWeather() 之类的操作。您的控制器应该负责从模型中获取数据并将其提供给视图。但是,许多控制器可能共享一个模型,这将帮助您解决当前尝试跨两个视图控制器重用函数的问题。 @JoshuaBreeden 谢谢,我还没有听说过。我现在看看。好像可以减轻我的负担。 @J.M.如果您刚刚开始,我会向您推荐 Apple 的免费电子书“App Development with Swift”。它不仅介绍了 Swift 语言的语法,还介绍了一些推荐的设计模式,这些模式将帮助您合理地布局您的应用程序。我正在谈论的这个特殊概念称为模型视图控制器或 MVC。 【参考方案1】:

听起来您正试图从您的 ProductRecsTableViewController 类中访问一个名为 getCityWeatherData 的函数,除非您在两个控制器之间存在某种类型的关系,否则您不能这样做。您可以创建一个名为ProductRecsTableViewControllerDelegate: AnyObject 的协议,该协议具有一个函数,可以将您需要的信息返回给您的ProductRecsTableViewController。无论哪种方式,听起来您只需要通过委托或属性在两个控制器之间传递数据/信息。

更新:#2

class CustomViewController: UIViewController, CustomDelegate 
    func askForData() -> Data 
        return _whateverDataYouWant
    


protocol CustomDelegate: AnyObject 
    func askForData() -> Data


class ProductRecsTableViewController: UITableViewController 
    weak var delegate: CustomDelegate?

    func myMethodThatNeedsAccessToData() 
        let data = delegate?.askForData()
        doStuffWith(data)
    


在此过程中的某个时刻,您需要在 ViewController 中输入 myProductsRectsTableViewController.delegate = self

【讨论】:

我正在阅读有关使用委托或协议的内容,但由于某种原因很难理解。我会检查你给的delegate: anyObject 谢谢,这有助于更多地解释协议过程。

以上是关于Swift3:为条件单元格从主 VC 调用 func 数据到 TableVC的主要内容,如果未能解决你的问题,请参考以下文章

将自定义单元格从一个视图控制器传递到另一个视图控制器

UIActionSheet 应该从弹出窗口中调用,但从主屏幕底部显示

使用多个单元格从另一张纸中搜索数据吗?

无法执行转场

将表格视图单元格从一个表格视图移动到新的表格视图

仅将可见单元格从 Excel 保存到 CSV