标签: viewwilldisappear

UISplitViewController 在 iOS 11.2 上启动时加载视图之前调用 viewWillDisappear(_:)

我有一个以UISplitViewController作为初始控制器的应用程序,它有一个主视图控制器和一个详细视图控制器(嵌入在 UINavigationControllers 中)作为其子视图控制器,在 Interface Builder 中布局。分割视图控制器的PreferredDisplayMode设置为.primaryHidden

我刚刚升级到 Xcode 9.2,它在模拟器中使用 iOS 11.2。当我在 iPhone(设备或模拟器)上启动应用程序时,我在启动时看到一个新行为:在详细视图控制器上的viewDidLoad()之前调用 viewWillDisappear (_:) 。此时,详细视图控制器尚未加载 - 它的所有 IBOutlet 均为 nil。调用之后,系统会像往常一样加载视图并调用viewDidLoad()

我发现这一点是因为viewWillDisappear(_:)方法访问了 UITextField 以检查它是否是第一响应者。在下面的代码中,文本字段通过 IBOutlet 连接到 UITextField:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    if textfield.isFirstResponder {
        textfield.resignFirstResponder()
    }
}
Run Code Online (Sandbox Code Playgroud)

由于视图尚未加载,文本字段为零,应用程序崩溃了。通过添加 nil 测试很容易解决这个问题。但在 Xcode 和 iOS 的早期版本中,崩溃并没有发生,因为我认为在加载视图之前没有调用viewWillDisappear(_:) 。

另外有趣的是,在 iPad(设备或模拟器)上运行 iOS 11.2 的 Xcode 9.2 不会发生这种情况。在 iPad 上,在详细视图控制器上启动时不会调用viewWillDisappear(_:) 。

这看起来像是一个错误:为什么应该在视图在启动时实际加载之前在详细视图控制器(或任何视图控制器)上调用viewWillDisappear(_:) 。 …

uisplitviewcontroller viewwilldisappear ios11.2

5
推荐指数
0
解决办法
368
查看次数

快速选择特定文本字段时移动视图

我创建了一个模因生成器应用程序来更好地学习 Swift 和 Xcode。我正在学习当用户与会被键盘遮挡的文本字段交互时移动视图。我有这个功能,只有一个例外。所需的功能是在用户为底部文本字段输入文本时让视图向上滑动,bot 顶部。无论用户与之交互的文本字段如何,视图都会向上滑动。

在此处输入图片说明

如何仅将此功能分配给底部文本字段?这是我的源代码:

import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate {

    @IBOutlet weak var imagePickerView: UIImageView!
    @IBOutlet weak var cameraButton: UIBarButtonItem!
    @IBOutlet weak var topText: UITextField!
    @IBOutlet weak var bottomText: UITextField!

    let memeTextAttributes:[String:Any] = [
        NSAttributedStringKey.strokeColor.rawValue: UIColor.black,
        NSAttributedStringKey.foregroundColor.rawValue: UIColor.white,
        NSAttributedStringKey.font.rawValue: UIFont(name: "HelveticaNeue-CondensedBlack", size: 30)!,
        NSAttributedStringKey.strokeWidth.rawValue: -5.0]

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        subscribeToKeyboardNotifications()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Diable camer a button if camera ource isn't available
        cameraButton.isEnabled = UIImagePickerController.isSourceTypeAvailable(.camera)
        topText.delegate = self …
Run Code Online (Sandbox Code Playgroud)

ios swift viewwilldisappear

0
推荐指数
1
解决办法
1299
查看次数