从 UITabeVieCell 中获取数据以填充到另一个 ViewController
Take data from UITabeVieCell to populate to another ViewController
我已经将我的应用程序添加到 Chameleon Framework 以生成随机颜色,我想将内部设置添加到我的应用程序。例如,我创建了一个 tabelViewController VC,然后我添加了一个开关,我想要的是当 mySwitch 开启时,我希望变色龙颜色填充 tableViewCells,当它关闭时,我希望 tableViewCells 为 .systemBackgoundColor。
我的设置VC
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "Chameleon Color"
let mySwitch = UISwitch()
mySwitch.onTintColor = .blue
mySwitch.addTarget(self, action: #selector(didTabSwitch(_:)), for: .valueChanged)
cell.accessoryView = mySwitch
return cell
}
@objc func didTabSwitch(_ sender: UISwitch){
if sender.isOn {
// populate the chameleon framework color
}
else {
// change to the default background color
}
}
ViewController
/// Provides a cell object for each row.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Fetch a cell of the appropriate type.
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = list[indexPath.row].name
cell.backgroundColor = UIColor(hexString: list[indexPath.row].color)
cell.textLabel?.textColor = UIColor(contrastingBlackOrWhiteColorOn: cell.backgroundColor, isFlat: true)
if let date = list[indexPath.row].date {
let formater = DateFormatter()
formater.timeZone = .current
formater.locale = .current
formater.timeStyle = .short
formater.dateStyle = .none
cell.detailTextLabel?.text = formater.string(from: date)
cell.detailTextLabel?.textColor = UIColor(contrastingBlackOrWhiteColorOn: cell.backgroundColor, isFlat: true)
}
return cell
}
如有任何帮助或提示,我们将不胜感激。
这归结为“我如何在我的应用程序的不同组件之间进行通信”。因为我假设您不只是想通知您的 ViewController
颜色变化,而是更新整个 UI(比如应用主题),最简单的方法是使用 NotificationCenter
并为其提供颜色,以便所有对更改感兴趣的组件都可以观察到它。
public extension NSNotification.Name {
static let ColorChanged = Self(rawValue: "color_changed")
}
@objc func didTabSwitch(_ sender: UISwitch){
if sender.isOn {
NotificationCenter.default.post(name: .ColorChanged, object: UIColor.randomFlat)
}
else {
NotificationCenter.default.post(name: .ColorChanged, object: nil)
}
}
在ViewController(或其他感兴趣的组件)
private var chameleonColor: UIColor? {
didSet {
tableView.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(
self,
selector: #selector(updateColor),
name: .ColorChanged,
object: nil
)
}
@objc private func updateColor(_ notification: Notification) {
chameleonColor = notification.object as? UIColor
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// ...
cell.backgroundColor = chameleonColor ?? .systemBackgroundColor
}
我已经将我的应用程序添加到 Chameleon Framework 以生成随机颜色,我想将内部设置添加到我的应用程序。例如,我创建了一个 tabelViewController VC,然后我添加了一个开关,我想要的是当 mySwitch 开启时,我希望变色龙颜色填充 tableViewCells,当它关闭时,我希望 tableViewCells 为 .systemBackgoundColor。
我的设置VC
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "Chameleon Color"
let mySwitch = UISwitch()
mySwitch.onTintColor = .blue
mySwitch.addTarget(self, action: #selector(didTabSwitch(_:)), for: .valueChanged)
cell.accessoryView = mySwitch
return cell
}
@objc func didTabSwitch(_ sender: UISwitch){
if sender.isOn {
// populate the chameleon framework color
}
else {
// change to the default background color
}
}
ViewController
/// Provides a cell object for each row.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Fetch a cell of the appropriate type.
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = list[indexPath.row].name
cell.backgroundColor = UIColor(hexString: list[indexPath.row].color)
cell.textLabel?.textColor = UIColor(contrastingBlackOrWhiteColorOn: cell.backgroundColor, isFlat: true)
if let date = list[indexPath.row].date {
let formater = DateFormatter()
formater.timeZone = .current
formater.locale = .current
formater.timeStyle = .short
formater.dateStyle = .none
cell.detailTextLabel?.text = formater.string(from: date)
cell.detailTextLabel?.textColor = UIColor(contrastingBlackOrWhiteColorOn: cell.backgroundColor, isFlat: true)
}
return cell
}
如有任何帮助或提示,我们将不胜感激。
这归结为“我如何在我的应用程序的不同组件之间进行通信”。因为我假设您不只是想通知您的 ViewController
颜色变化,而是更新整个 UI(比如应用主题),最简单的方法是使用 NotificationCenter
并为其提供颜色,以便所有对更改感兴趣的组件都可以观察到它。
public extension NSNotification.Name {
static let ColorChanged = Self(rawValue: "color_changed")
}
@objc func didTabSwitch(_ sender: UISwitch){
if sender.isOn {
NotificationCenter.default.post(name: .ColorChanged, object: UIColor.randomFlat)
}
else {
NotificationCenter.default.post(name: .ColorChanged, object: nil)
}
}
在ViewController(或其他感兴趣的组件)
private var chameleonColor: UIColor? {
didSet {
tableView.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(
self,
selector: #selector(updateColor),
name: .ColorChanged,
object: nil
)
}
@objc private func updateColor(_ notification: Notification) {
chameleonColor = notification.object as? UIColor
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// ...
cell.backgroundColor = chameleonColor ?? .systemBackgroundColor
}