【问题标题】:Change textColor, viewBackground & subview Background更改文本颜色,查看背景和子视图背景
【发布时间】:2020-05-03 16:37:34
【问题描述】:

我想根据条件更改视图控制器背景颜色、子视图背景颜色和文本颜色。

例如:

mainViewcontroller 上有 2 个选项(A 和 B ViewController)。

  • 如果用户选择 A ViewController,那么它将跟随其颜色从 A 到 X、Y、Z 视图控制器,直到我推送、执行 Segue 或呈现 X、Y、Z 视图控制器。

  • 如果用户选择 B 视图控制器,那么它将跟随其颜色从 B 到 X、Y、Z 视图控制器,直到我推送、执行Segue 或呈现 X、Y、Z 视图控制器。

注意:这些子视图可能包括 tableview、collectionview、CollectionView 中的 tableView 或 tableView 中的 CollectionView 提前致谢。

我正在使用这种方法

 if gold {
    if let vc = storyboard?.instantiateViewController(withIdentifier: "ListView") as? ListView {
        vc.gold = true
        vc.mainBackgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
        vc.labelColor = #colorLiteral(red: 0.968627451, green: 0.6196078431, blue: 0.1529411765, alpha: 1)
        vc.topBarColor = #colorLiteral(red: 0.2549019754, green: 0.2745098174, blue: 0.3019607961, alpha: 1)
        present(vc, animated: true, completion: nil)
    }
}

【问题讨论】:

  • “mainViewController 上有 2 个选项(A & B ViewController)”。你的意思是 mainViewController 上的 A 和 B 视图吗?一般如果要推送属性到后续VC,可以使用prepareForSegue()
  • @LorenRogers 这不合适,因为如果我从 A 到 U、V、W、X、Y、Z 视图控制器,我必须为每个对象分配 n 个颜色。例如Z viewController有2个collection view,1个collectionView有2个tableView,
  • 你的 Z viewController 有一个属性,我们称之为 UIColor 的“viewColor”。然后在推送segue的ViewController中,实现prepareForSegue(),获取destinationViewController为? Z 视图控制器。然后 zViewController.viewColor = 一些颜色。然后在 Z viewController 中,您的视图设置您想要的任何颜色(我假设的背景颜色) collectionView.backgroundColor = self.viewColor
  • 在这种情况下,采用UITableViewDelegate selectCell,并根据单元格,传递一些预定义在IB segueIdentifier中。再次在 mainVC prepareForSegue 中为那个 segueIdentifier 传递一些颜色

标签: ios swift viewcontroller reusability


【解决方案1】:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if indexPath.row == 0 {
        self.performSegue(withIdentifier: "ThisColorSegue", sender: nil)
    } else if indexPath.row == 1 {
        self.performSegue(withIdentifier: "ThatColorSegue", sender: nil)
    } else if indexPath.row == 2 {
        self.performSegue(withIdentifier: "SomeOtherColorSegue", sender: nil)
    }
}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "ThisColorSegue", let dest = segue.destination as? ZController {
        dest.color = SomeColor
    }
}

【讨论】:

  • 请看我的问题,我在那里发布我的代码,如果你的方法不同,请告诉我。
  • 请在您的答案中添加一些上下文,而不仅仅是邮政编码。
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2020-11-05
  • 2015-08-24
  • 1970-01-01
相关资源
最近更新 更多