我在一个有很多 UI 控件的 iOS 应用程序中有 VC。我现在需要在特定状态下替换或“模拟”其中一些控件。在某些情况下,这只是禁用按钮操作,但在某些情况下,发生的操作需要用完全不同的东西替换。
我真的不喜欢在代码库中到处乱扔这种检查的想法。
if condition {
...Special/disabled functionality
} else {
...Normal functionality
}
在 Android 中,我可以将每个 Fragment/Activity 子类化并在那里构建功能,然后在插入 Fragment 或启动 Activity 时执行 if/else。
但是在带有 Storyboards/IBActions 和 Segues 的 iOS 上,UI 和 VC 确实是紧密耦合的。您最终要么复制 UI 视图,要么向已经很大的 VC 添加大量繁琐的代码。
在 iOS 中处理这个问题的最佳方法是什么?
我想避免做的示例代码:
//Before:
class SomeViewController : UIViewController {
@IBAction onSomeButton() {
checkSomeState()
doANetworkRequest(() -> {
someCompletionHandler()
updatesTheUI()
}
updateTheUIWhileLoading()
}
@IBAction onSomeOtherButton() {
checkAnotherState()
updateUI()
}
}
//After:
class SomeViewController : UIViewController {
@IBAction onSomeButton() {
if specialState {
doSomethingSimpler()
} else {
checkSomeState()
doANetworkRequest(() -> {
someCompletionHandler()
updatesTheUI()
}
updateTheUIWhileLoading()
}
}
@IBAction onSomeOtherButton() {
if specialState {
return // Do nothing
} else {
checkAnotherState()
updateUI()
}
}
}