我在更改视图控制器的颜色时遇到问题。我想点击当前控制器上的按钮,它将更改前一个控制器的背景颜色并保存
@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会更改颜色,这是我想要的,但我也希望它更改以前的控制器背景色的颜色并保存
我认为这与单例或通知有关,但我感到非常困惑!
答案 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")
}