如何更改 IASKSpecifierValuesViewController 中的背景或文本标签颜色?

how to change background or textLabel color in IASKSpecifierValuesViewController?

我正在我的项目中使用 InAppSettingsKit。 我定制了 IASKAppSettingsViewController 但我没有定制 IASKSpecifierValuesViewController。

我的 IASKAppSettingsViewController 自定义 Class;

import UIKit

class SettingsViewController: IASKAppSettingsViewController {

  override func viewDidLoad() {
    super.viewDidLoad()

  }

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

    let cell = super.tableView(tableView, cellForRowAt: indexPath)
    cell.backgroundColor = .clear
    cell.textLabel?.textColor = .white
    cell.detailTextLabel?.textColor = .gray
    cell.selectionStyle = .none

    return cell
  }
}

如何调用自定义 IASKSpecifierValuesViewController class? 注意:我正在使用故事板。我在没有情节提要解决方案的情况下开放。谢谢大家...

老实说,目前还没有很好的解决方案。您可以做什么:使用方法混合来覆盖 tableView:cellForRowAtIndexPath: 方法。另一种方法是使用 custom view 在选择时推送 IASKSpecifierValuesViewController 子类。

或者您可以修改 IASK 以在 IASKSettingsDelegate 中添加回调。这可能是这样的:

- (UITableViewCell*)tableView:(UITableView*)tableView valueCellForSpecifier:(IASKSpecifier*)specifier index:(NSUInteger)index;

要实现这一点,必须将委托传播到 IASKSpecifierValuesViewController 如果实现,它将执行回调。

或者,作为一种更灵活的解决方案,我们可以允许使用 IASKSpecifierValuesViewController 的自定义子类,可能通过在 settings.plist 中指定 IASKViewControllerClass 来覆盖默认的 IASKSpecifierValuesViewController .

我欢迎这样的拉取请求! (我是 IASK 维护者。)

好的,我找到了解决方案。

我重写了 didSlectRowAtIndexPath 方法。

import UIKit

class SettingsViewController: IASKAppSettingsViewController {

  override func viewDidLoad() {
    super.viewDidLoad()

    self.tableView.backgroundColor = .black

  }

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

    let cell = super.tableView(tableView, cellForRowAt: indexPath)
    cell.backgroundColor = .clear
    cell.textLabel?.textColor = .white
    cell.selectionStyle = .none

    return cell
  }

  override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    //Creating specifier object
    let specifier = self.settingsReader.specifier(for: indexPath)
    //Creating a custom IASKSpecifierValuesViewController instance
    let targetViewController = SettingsDetail(style: .grouped)
    targetViewController.currentSpecifier = specifier
    targetViewController.settingsStore = settingsStore
    targetViewController.settingsReader = settingsReader
    self.navigationController?.pushViewController(targetViewController, animated: true)
  }
}

详情查看源码:

import UIKit

class SettingsDetail: IASKSpecifierValuesViewController {

  override func viewDidLoad() {
    super.viewDidLoad()

    self.tableView.backgroundColor = .black
  }

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

    let cell = super.tableView(tableView, cellForRowAt: indexPath)
    cell.backgroundColor = .clear
    cell.textLabel?.textColor = .white
    cell.selectionStyle = .none

    return cell
  }
}