gpt4 book ai didi

ios - 让 View 覆盖应用程序中所有其他 viewController 的正确方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 06:10:41 29 4
gpt4 key购买 nike

我是 iOS 开发的新手,正在计划开发一款应用。该应用程序将有几个不同的场景/ViewController,它们将占据整个屏幕。

我打算在屏幕的左上角始终有一个小按钮,可以将用户带回主页,无论当前显示的是哪个 vc。

我可以在每个 viewController 的 View 中放置一个单独但相同的按钮,但这看起来既不优雅又脆弱。

阅读 View Controller 编程指南后,我的直觉是创建一个 View Controller 容器,它将成为根 vc - 这个 vc 将有两个子 vc - 一个带有主页按钮,另一个在所有其他 VC 的下方进去(有效地成为新的根 vc。)

对于更有经验的 iOS 开发人员来说,这是否是一个明智的解决方案?有更简单的解决方案吗?

感谢收到的任何建议。

最佳答案

我认为这可能是您的最佳解决方案。在 iOS 中,ViewController 会占用其 View 的所有可用空间。如果没有您自己管理的“容器” View ,您放置的任何 View Controller 都将占据整个窗口,覆盖您显示的所有内容。

但是,根据您的项目,还有一种可能更简单的替代方法。

您可以在某个中心位置(例如,您的 App Delegate 类)创建一个 UIView 对象(您的按钮)。该 View 可以有一个按钮,您可以将其附加到方法:

@implementation AppDelegate

- (void) someSetupMethod {
UIButton* b = [UIButton buttonWithType:UIButtonTypeCustom];
// setup whatever properties

// Now set button to call a method *on this AppDelegate object* ("self"):
[b addTarget:self action:@selector(homeButtonTapped:) forControlEvents:UIControlEventTouchUpInside];

// Store the button definition somewhere permanant
self.reusableHomeButton = b;
}

- (void) homeButtonTapped:(id)sender {
// do something to pop view controllers back to what you want.
}

然后,在您的 View Controller 中,它们都可以在出现时显示主页按钮:

- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];

AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
[self.view addSubview:appDelegate.reusableHomeButton];
}

这利用了 [view addSubview:...] 的一个有意的副作用,即如果 View 已经在某个父 View 中,它将它从那个父 View 中删除 首先,然后添加到新 View 。

它还利用了按钮可以将其消息发送到任何 对象这一事实。它不一定是管理按钮父 View 的 ViewController。

这会导致您的按钮从一个显示的 View Controller 的 .view 中“移动”到一个新的 Controller 。

由于按钮有一个 AppDelegate 对象的目标(因此会将它的消息发送到该对象),它可以“从任何地方”工作,只要应用程序委托(delegate)对象存在以接收消息(只要它这样做当您的应用程序正在运行时)。

关于ios - 让 View 覆盖应用程序中所有其他 viewController 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15326966/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com