使用 if 语句更改 UIViewcontroller

Posted

技术标签:

【中文标题】使用 if 语句更改 UIViewcontroller【英文标题】:Change UIViewcontroller with if statement 【发布时间】:2017-02-14 21:24:39 【问题描述】:

我有两个相同的视图控制器,唯一的区别是首先显示地图视图,其他不显示地图视图。

在这种情况下,我有分段控件,在分段 0 中显示带有 mapView 的视图控制器,但我有一些其他数据没有要在 mapview 中显示的信息。我想知道我怎么能做到这一点(使用 if 语句或类似的东西),因为另一个 UIView 没有 segue。

【问题讨论】:

当你不想显示地图视图时,你能把高度限制设置为0吗? @J.Wang 是的,但设置后出现很多冲突约束 如果你设置正确就不应该。有什么冲突? 【参考方案1】:

这本质上是一种不好的做法。如果您的应用需要 2 个或更多具有相似设计的屏幕,那么您应该只使用一个视图控制器/场景。这样,如果发生设计更改,您只需更改一次。

2 个仅具有地图可见性差异的视图控制器并不难编写代码。您只需为该 viewcontrollerA 声明一个属性 bool ,如下所示:

@property (nonatomic, assign) BOOL isMapVisible;

然后在 viewControllerA 上的 viewDidload 上,通过以下方式设置此地图的可见性:

if (!_isMapVisible) 
  [_mapView setHidden = YES];
 

调用者 viewcontroller 然后实现 prepareForSegue 并在执行 segue 到 viewControllerA 之前相应地设置 _isMapVisible。

【讨论】:

如果我使用这个,我的视图会出现一个空格? 其实我不确定你想要什么。这只是一个如何使用单个 Viewcontroller 并根据调用者以不同方式显示数据的示例。在if语句中,你需要编写自己的方法——例如,将所有与mapView相关的对象放在另一个UIView中,然后在这个if语句中将这个UIView的height-constraint设置为0。那就是如果你完全使用约束。如果您不使用约束,则必须手动定位。有很多可能性,您需要在代码/故事板上提供更多信息。【参考方案2】:

如果你想隐藏它,你可以将地图视图高度设置为 0。喜欢:

mapView.frame.size.height = 0

【讨论】:

以上是关于使用 if 语句更改 UIViewcontroller的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 中的三元运算符更改函数中的 if else 语句?

当使用 view.window?.rootViewController 根据 if 语句更改视图时,嵌入式控制器不会被激活

Vue js:使用 v-if 和 v-else 语句更改 CSS

如何使用 if 语句比较 laravel 数据库中的值?

PHP-Netbeans:如何更改多条件 if 语句的格式

Java重构-策略模式状态模式卫语句