如何从当前视图控制器更改前一个视图控制器的颜色?

时间:2019-09-02 13:21:06

标签: swift xcode

我在更改视图控制器的颜色时遇到问题。我想点击当前控制器上的按钮,它将更改前一个控制器的背景颜色并保存

@IBAction func viewColourChange(_ sender: UIButton) {
        UIView.animate(withDuration: 0.5, animations:
            {self.viewColourChange.backgroundColor = #colorLiteral(red: 1, green: 0.9856258568, blue: 0.2624827082, alpha: 1)
        }, completion: nil)
        Haptic.impact(.medium).generate()
    }

我有它,所以当我单击按钮时,特定的UIView会更改颜色,这是我想要的,但我也希望它更改以前的控制器背景色的颜色并保存

我认为这与单例或通知有关,但我感到非常困惑!

2 个答案:

答案 0 :(得分:5)

当您展示/推送第二个vc时,像这样设置一个委托

let second = ///
second.delegate = self
present/push/segue

然后在第二个vc内添加var

weak var delegate:FirstVC?

然后更改

delegate?.view.backgroundColor = ///

答案 1 :(得分:0)

使用your-app.domain/ngsw/state是实现此目的的简单方法。首先,当您点击按钮时,在当前视图控制器中发布通知:

SAFE_MODE

并将此扩展名添加到代码中的某个位置:

regex

然后在您以前的视图控制器中添加该通知的观察者,例如:

function onBackPress() {
  if (Actions.state.index === 0) {
    return false;
  }
  Actions.pop();
  return true;
}



const AppNavigator = conn()(Router);

  return (
    <AppNavigator navigator={navigator} backAndroidHandler={onBackPress} />
  );

编辑:要保存新颜色,可以使用NotificationCenter

@IBAction func viewColourChange(_ sender: UIButton) {
    let newColor = #colorLiteral(red: 1, green: 0.9856258568, blue: 0.2624827082, alpha: 1)
    UIView.animate(withDuration: 0.5, animations: { self.viewColourChange.backgroundColor = newColor }, completion: nil)
    Haptic.impact(.medium).generate()
    NotificationCenter.default.post(name: .viewColorChanged, object: nil, userInfo: ["newColor" : newColor])
}

用法:

extension Notification.Name {
    static let viewColorChanged = Notification.Name("viewColorChanged")
}