UIViewController

本文深入探讨了iOS开发中视图控制器之间的三种主要迁移方式:添加子视图、使用present和dismiss方法进行模态展示,以及利用UINavigationController进行push和pop操作。详细介绍了每种方法的适用场景和相关函数,为开发者提供了丰富的实践指导。

UIViewController

 

目录

  • 概述
  • UIViewController之间的迁移

 

概述

 

UIViewController之间的迁移

IOS编程中,视图间的跳转有三种方式,方式一:把一个视图添加到另一个视图控制器的视图上作为其子视图,要离开此视图时,把该视图移除(不推荐);方式二:一次显示一个视图控制器,然后从一个视图控制器迁移到另一个;方式三:运用UINavigationController的push和pop; 

方法一

  把一个视图添加到另一个视图控制器的视图上作为其子视图(覆盖VIew达到切换效果);

  使用到的相关函数:

           -(void)addSubview:(UIView *)view;

           -(void)removeFromSuperview;

方法二

  一次显示一个视图控制器然后从一个视图控制器迁移到另一个;

  相关函数:

    -(void)presentViewController:(UIViewController *)viewControllerToPresentanimated:(BOOL)flag completion:(void (^)(void))completion

    -(void)dismissViewControllerAnimated:(BOOL)flag completion:(void(^)(void))completion

设置迁移的动画效果

    self.secondVC.modalTransitionStyle =UIModalTransitionStyleCrossDissolve等等;

方法三

  结合UINavigationController

待解决

  UIView视图的子视图里面的页面跳转

 

转载于:https://www.cnblogs.com/IOS-Developer/p/4296682.html

### GIDSignIn 使用指南及 UIViewController 类型相关问题解决 在使用 `GIDSignIn.sharedInstance.signInWithPresentingViewController:self completion:` 方法时,如果出现与 `self` 或 `UIViewController` 类型相关的报错,可能是以下原因导致的。以下是详细的解决方案和使用指南。 #### 1. 确保 `self` 是 `UIViewController` 的实例 该方法要求传入的参数是一个符合 `UIViewController` 类型的对象。如果 `self` 不是 `UIViewController` 或其子类,则会导致编译错误或运行时崩溃。可以通过以下方式验证 `self` 是否为 `UIViewController` 的实例: ```objc if ([self isKindOfClass:[UIViewController class]]) { [GIDSignIn.sharedInstance signInWithPresentingViewController:self completion:^(GIDSignInResult * _Nullable result, NSError * _Nullable error) { if (error == nil && result != nil) { NSLog(@"登录成功"); } else { NSLog(@"登录失败:%@", error.localizedDescription); } }]; } else { NSLog(@"self 必须是 UIViewController 的实例"); } ``` 此代码片段确保了调用方是一个有效的视图控制器[^1]。 #### 2. 设置正确的代理 在调用 `signInWithPresentingViewController:completion:` 方法前,必须确保 `GIDSignIn.sharedInstance.delegate` 已被正确设置为当前视图控制器。例如: ```objc GIDSignIn.sharedInstance.delegate = self; ``` 如果没有正确设置代理,可能导致登录界面无法正常显示或回调失败[^2]。 #### 3. 配置 Info.plist 文件 确保在项目的 `Info.plist` 文件中添加了必要的键值对,包括但不限于: - `CFBundleURLTypes`: 定义应用的 URL Scheme。 - `GoogleSignInClientID`: 设置 Google Sign-In 的客户端 ID。 如果缺少这些配置,可能导致登录失败或回调异常[^3]。 #### 4. 更新 Google Sign-In SDK 如果使用的 Google Sign-In SDK 版本较旧,可能导致方法签名不匹配或功能异常。建议通过 CocoaPods 更新到最新版本: ```bash pod 'GoogleSignIn' pod install ``` 更新后,确保代码中的方法签名与最新版本的 SDK 保持一致[^4]。 #### 5. 处理 iOS 13 及更高版本的兼容性问题 对于 iOS 13 及更高版本,需要在 `SceneDelegate` 中初始化窗口和根视图控制器,否则可能导致登录界面无法正常显示。例如: ```objc self.window = [[UIWindow alloc] initWithWindowScene:(UIWindowScene*)scene]; self.window.rootViewController = [[UIViewController alloc] init]; [self.window makeKeyAndVisible]; ``` #### 6. 错误处理 如果登录过程中出现错误,可以通过 `NSError` 对象的 `localizedDescription` 属性获取详细信息。常见的错误包括但不限于: - 用户取消登录。 - 网络连接问题。 - 配置错误(如未正确设置客户端 ID)。 以下是一个完整的实现示例: ```objc [GIDSignIn.sharedInstance signInWithPresentingViewController:self completion:^(GIDSignInResult * _Nullable result, NSError * _Nullable error) { if (error == nil && result != nil) { GIDGoogleUser *user = result.user; NSString *googleIdToken = user.idToken; NSString *googleAccessToken = user.accessToken; NSLog(@"Google ID Token: %@", googleIdToken); NSLog(@"Google Access Token: %@", googleAccessToken); } else { NSLog(@"Google 登录失败:%@", error.localizedDescription); } }]; ``` #### 7. UIViewController 类型的相关用法 `UIViewController` 是 iOS 开发中用于管理用户界面的核心类。以下是一些常见用法: - **初始化视图控制器**:可以通过 `init` 或 `initWithNibName:bundle:` 方法创建视图控制器实例。 - **加载视图**:当视图控制器的视图首次被访问时,会自动调用 `loadView` 和 `viewDidLoad` 方法。 - **生命周期方法**:常用的生命周期方法包括 `viewWillAppear:`、`viewDidAppear:`、`viewWillDisappear:` 和 `viewDidDisappear:`。 - **导航**:可以通过 `UINavigationController` 实现视图控制器的推送和弹出操作。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值