iOS窗口的根视图控制器通常在开始时一次初始化为标签栏控制器或导航控制器吗?在应用程序中多次更改根视图控制器是否可以?
我有一个场景,根据用户操作,顶视图是不同的.我想到的是一个导航控制器,顶视图控制器具有启动画面的图像,并根据需要推/弹视图控制器.或者,我可以继续更改窗口的顶视图控制器.哪种方法更好?
我想获得UINavigationController的rootViewController.它在Objective-c中工作,但是当我在Swift中使用它时,错误提醒我它是错误的.
如果我这样做,添加as! NSArray,它的工作原理,但也提醒我"从'[UIViewController]'转换为无关类型'NSArray'总是失败".
有人可以显示更好的方法来获取`rootViewController``而不会出错.谢谢.
我创建了一个名为“Start.storyboard”的新故事板,但是当我将主界面更改为“开始”时什么也没发生,该应用程序刚刚以默认故事板“Main.storyboard”启动。我使用的是 Xcode 11.2.1 和 iOS 13.2.3
此外,我尝试将 rootViewController 从 (AppDelegate) didFinishLaunchingWithOptions 更改为以下代码:
let sb = UIStoryboard(name: "Start", bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: "PhoneVC")
self.window?.rootViewController = vc
Run Code Online (Sandbox Code Playgroud)
但我得到了相同的结果,主故事板无法更改。
我是 iOS 开发的新手,试图学习如何以编程方式创建和设置视图。
我正在尝试在 Obj-C 中快速声明
window?.rootViewController = UINavigationController(rootViewController : ViewController())
Run Code Online (Sandbox Code Playgroud)
项目:单视图应用程序。尝试链接默认创建的 ViewController.h
根据 Krunals 的回答,我更新了代码,但模拟器中未显示导航控制器
Cmd+单击控制器不会导航到 ViewController 文件
#import "AppDelegate.h"
#import "ViewController.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIScreen *screen=[[UIScreen alloc]init];
UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.makeKeyAndVisible;
ViewController *controller = [[ViewController alloc] init];
window.rootViewController = [[UINavigationController alloc] initWithRootViewController:controller] ;
Run Code Online (Sandbox Code Playgroud) 我在AppDelegate.swift中有以下代码来为iOS应用程序设置根视图控制器。但这行不通。它遵循目标结构(在“常规”选项卡下定义),并忽略此代码。
(Xcode 11,Swift 5.1,iOS 13)
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
guard let rootVC = UIViewController() else {
print("Root VC not found")
return true
}
let rootNC = UINavigationController(rootViewController: rootVC)
window?.rootViewController = rootNC
window?.makeKeyAndVisible()
return true
}
}
Run Code Online (Sandbox Code Playgroud)
无法了解问题出在哪里。
我也尝试了以下参考,但没有运气:
这是我多年来找到我需要的每个答案后的第一个问题。
\n我在 IOS 中为 iPhone 编写了一些应用程序,我并不总是确定我在做什么,但它们可以工作!
\n他们使用 Google 登录,并且工作正常。\n现在我想为 Mac OS 编写一个应用程序,但我无法解决的问题是这一行:
\nGIDSignIn.sharedInstance.signIn(withPresenting: rootViewController) \nRun Code Online (Sandbox Code Playgroud)\n在这个函数中:
\nfunc handleSignInButton() {\n\xc2\xa0 GIDSignIn.sharedInstance.signIn(\n\xc2\xa0 \xc2\xa0 withPresenting: rootViewController) { signInResult, error in\n\xc2\xa0 \xc2\xa0 \xc2\xa0 guard let result = signInResult else {\n\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 // Inspect error\n\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 return\n\xc2\xa0 \xc2\xa0 \xc2\xa0 }\n\xc2\xa0 \xc2\xa0 \xc2\xa0 // If sign in succeeded, display the app\'s main content View.\n\xc2\xa0 \xc2\xa0 }\n\xc2\xa0 )\n}\nRun Code Online (Sandbox Code Playgroud)\n在 Google 登录教程中:\n https://developers.google.com/identity/sign-in/ios/sign-in
\n我可以用什么来替换 Mac OS 应用程序中的 …
我想摆脱我的函数中的“‘windows’在 iOS 15.0 中已弃用:在相关窗口场景上使用 UIWindowScene.windows”消息(顺便说一下,我的函数运行得很好。)。
涉及的代码行:
banner.rootViewController = UIApplication.shared.windows.first?.rootViewController
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我的职能:
struct AdView : UIViewRepresentable {
func makeUIView(context: UIViewRepresentableContext<AdView>) -> GADBannerView {
let banner = GADBannerView(adSize: kGADAdSizeBanner)
banner.adUnitID = "ca-app-pub-3940256099942544/2934735716" // test ad
banner.rootViewController = UIApplication.shared.windows.first?.rootViewController
banner.load(GADRequest())
return banner
}
func updateUIView(_ uiView: GADBannerView, context: UIViewRepresentableContext<AdView>) {}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过,但它不起作用:
banner.rootViewController = UIApplication.shared.connectedScenes.first?.rootViewController
Run Code Online (Sandbox Code Playgroud)
谢谢
我在尝试同时设置 aUINavigationController的rootViewUIViewController时遇到了困境UINavigationBar。似乎 aUINavigationController可以用 a 启动,rootViewController如下所示:
let navController = UINavigationController(rootViewController: someViewController)
Run Code Online (Sandbox Code Playgroud)
或者使用 UINavigatioBar,如下所示:
let navController = UINavigationController(navigationBarClass: someUINavigationBar, toolbarClass: nil)
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够添加一个 rootViewController 以及一个自定义的UINavigationBar. 有什么办法吗?
我已经尝试过设置UINavigationBar类似的设置navController.navigationController?.navigationBar = MyNavigationBar
,但似乎 navigationController?.navigationBar 只是一个 getter。
uinavigationbar uinavigationcontroller ios swift rootviewcontroller
我正在阅读Xamarin Hello.iOS教程,尝试完成以下步骤6和7时出现问题...
问题是当我从导航控制器执行Ctrl +拖动到视图控制器时.他们提到的Pop不会保持打开状态,因此我无法选择Root.
我在macOS Sierra 10.12.1上,问题似乎发生在Xamarin Studio和Visual Studio for Mac上.
=== Xamarin Studio Community ===
Version 6.1.2 (build 44)
Installation UUID: c2228d3d-9182-421f-ac39-c5cbd1dba547
Runtime:
Mono 4.8.0 (mono-4.8.0-branch/902b4a9) (64-bit)
GTK+ 2.24.23 (Raleigh theme)
Package version: 408000371
=== NuGet ===
Version: 3.4.3.0
=== Xamarin.Profiler ===
Not Installed
=== Apple Developer Tools ===
Xcode 8.1 (11544)
Build 8B62
=== Xamarin.Mac ===
Version: 2.10.0.113 (Xamarin Studio Community)
=== Xamarin.Android ===
Version: 7.0.2.37 (Xamarin Studio Community)
Android SDK: /Users/[NAME]/Library/Developer/Xamarin/android-sdk-macosx
Supported Android versions:
6.0 …Run Code Online (Sandbox Code Playgroud) xamarin.ios ios xamarin rootviewcontroller visual-studio-mac
我正在尝试在我的应用程序中创建一个共享按钮。SwiftUi 上的应用程序,Xcode 版本 13.2.1,iPhone 15.2
如果我使用这段代码:
let url = URL(string: "https://example.com")
let activityController = UIActivityViewController(activityItems: [url!], applicationActivities: nil)
UIApplication.shared.windows.first?.rootViewController!.present(activityController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
这是错误:
[演示] 尝试在 < TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_7AnyViewVS_12RootModifier _: 0x7feb16a05430> 上呈现 <UIActivityViewController: 0x7feb1600e600> (来自 < TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_7AnyViewVS_12RootModifier _: 0x7feb16a05430>) 已经呈现 < TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView : 0x7feb05f142e0>。
我知道它已经呈现,但我不明白你如何绕过它。
如果我使用以下组合:
如果我添加一个.presentedViewController?得到这个组合后,共享按钮可以工作,但仅在 iPhone 上并且控制台中存在很多错误,在 iPad 上应用程序完全崩溃。
UIApplication.shared.windows.first?.rootViewController!.presentedViewController?.present(activityController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
你能告诉我如何解决这个问题吗?
ios ×6
swift ×4
swiftui ×3
admob ×1
appdelegate ×1
ios13 ×1
objective-c ×1
storyboard ×1
xamarin ×1
xamarin.ios ×1
xcode ×1
xcode11 ×1