swift - 在 swift 中调用 viewWillAppear 方法时,我的 textFields 不会消失

标签 swift

import UIKit
import Alamofire
import SystemConfiguration

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var simpleLabel: UILabel!
    @IBOutlet weak var uiNameSearch: UITextField!
    @IBOutlet weak var uiGivenName: UITextField!
    var patient1 = Patient!()

    override func viewDidLoad() {
        super.viewDidLoad()
        uiNameSearch.delegate = self
        uiGivenName.delegate = self

        print("ViewController viewDidLoad")
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        self.simpleLabel.center.x -= self.view.bounds.width
        self.uiGivenName.center.x -= self.view.bounds.width
        print("Call viewWillAppear")
    }

    override func viewDidAppear(animated: Bool){
        super.viewDidAppear(animated)
        UIView.animateWithDuration(0.9 , animations: {
           // self.simpleLabel.center.x += self.view.bounds.width
            self.uiGivenName.center.x += self.view.bounds.width
        })

        UIView.animateWithDuration(0.7 , delay: 0.7, options: [], animations: {
            self.uiNameSearch.center.x += self.view.bounds.width
        }, completion: nil )
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }



    @IBAction func searchForName(sender: UIButton) {
        let header = ["Accept" : "application/json"]
        let name = uiNameSearch.text!
        let given = uiGivenName.text!
        if name.characters.count == 0 {
            self.view.makeToast( message: "Please insert the family name of the patient!")
        } else  if given.characters.count == 0 {
            self.view.makeToast(message: "Please insert the patient given name!")
        } else if checkInternetConnection() == false {
            self.view.makeToast(message: "Please connect to the internet!")
        } else {
            Alamofire.request(.GET, "https://open-ic.epic.com/FHIR/api/FHIR/DSTU2/Patient?family=\(name)&given=\(given)", headers: header).responseJSON { response in
                self.patient1 = Patient(response: response.result.value!)
                self.performSegueWithIdentifier("showSegue", sender: sender)

            }
        }
    }

    func checkInternetConnection() -> Bool {
        var zeroAddress = sockaddr_in()
        zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
        zeroAddress.sin_family = sa_family_t(AF_INET)
        let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
            SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
        }
        var flags = SCNetworkReachabilityFlags()
        if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
            return false
        }
        let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
        let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
        return (isReachable && !needsConnection)
    }


    func textFieldShouldReturn(textField: UITextField) -> Bool {
        switch textField {
        case uiNameSearch:
            uiNameSearch.resignFirstResponder()
            uiGivenName.becomeFirstResponder()

        case uiGivenName:
            uiGivenName.resignFirstResponder()

        default:
            print("")
        }
        return true
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender:AnyObject?){
        if segue.identifier == "showSegue" {
            if let displayViewController = segue.destinationViewController as? DisplayViewController {
                displayViewController.patient1 = patient1
            }

        }

    }
}

我想让 uiGivenName 和 simpleLabel 消失,直到创建 View 以及调用 viewDidAppear 从左侧出现。

最佳答案

您的 View 不会消失,因为您正在更改 viewWillAppear 中 View 的位置,并且当调用 viewWillAppear 时, View 即将添加到 View 层次结构中(即 View 仍未添加到 View 层次结构中。),因此它没有反射(reflect)在您的用户界面中。

所以你可以在 viewDidLayoutSubviews 中做你的事情,因为如果你想在 UI 实际出现在屏幕上之前修改它,这是最好的地方。

编辑 -

替换这个 -

    override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.simpleLabel.center.x -= self.view.bounds.width
    self.uiGivenName.center.x -= self.view.bounds.width
    print("Call viewWillAppear")
}

    override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    self.simpleLabel.center.x -= self.view.bounds.width
    self.uiGivenName.center.x -= self.view.bounds.width
}

关于swift - 在 swift 中调用 viewWillAppear 方法时,我的 textFields 不会消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34680020/

相关文章:

swift - 使用 HMAC SHA512 从 API 获取数据 - Swift

swift - 如何在 SwiftUI 的不同 View 中更新 Cloud Firestore 中的数据?

ios - 有没有办法分配 NavigationController 的 rootViewController ?

ios - 求三次贝塞尔曲线上一点的正切

arrays - 使用数组中的一个索引

ios - 准备 segue 导致 "found nil while unwrapping an Optional value"

arrays - 按低于特定数字的值过滤数组

swift - RxSwift 正确使用变量

ios - Firebase FCM 关于 IOS 10 的说明

swift - Xcode 11 - 在 Catalyst Swift 中禁用调整大小模式