Кнопка и метка исчезают после перехода - PullRequest
0 голосов
/ 01 февраля 2019

Я очень новичок в swift и xcode, и, поскольку я занимался созданием приложений, я столкнулся с проблемой.Я пытаюсь создать кнопку, которая переключает контроллеры представления после аутентификации моего лица с FaceID.Это то, что я до сих пор.Когда я нажимаю кнопку, она выполняет аутентификацию, но когда она переходит в другое окно, метка и кнопка исчезают.У кого-нибудь есть идеи почему?Все помогает.Спасибо (:

Примечание. Несмотря на то, что кнопка не видна, она все еще функционирует. Я знаю это, потому что, когда я нахожусь в Controller2 и нажимаю на верхнюю левую кнопку, она завершает действие. Проблема просточто его не видно.

Контроллер1 слева и Контроллер2 справа Controller1 on left and Controller2 on right

код:

@IBAction func faceIDButton(_ sender: Any) {
    let context = LAContext()

    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
        context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "To sign in") { (wasSuccessful, errorInCode) in
            if wasSuccessful {
                self.performSegue(withIdentifier: "toSecondView", sender: self)
            }
        }
    }
}

1 Ответ

0 голосов
/ 01 февраля 2019

Сначала вам нужно модально представить виртуальный канал и сделать его основной вид прозрачным, только неповрежденная часть - это прямоугольник, в котором вы идентифицируете лицо этим

let vc = self.storyboard!.instantiateViewController(withIdentifier: "SecondVC") as! SecondVC
vc.delegate = self  //to send success of face detection 
vc.providesPresentationContextTransitionStyle = true 
vc.definesPresentationContext = true 
vc.modalPresentationStyle = .overCurrentContext  // modally key line
self.present(vc, animated: false, completion: nil)

, также вы можете установитьэти свойства для второго виртуального контейнера в IB или установите их внутри prepareForSegue, который вызывается performSegue для типа шоу segue

Second , не переходите от второго виртуального канала ксначала вам нужно использовать только

self.dismiss(animated:true,completion:nil)

Наконец завершение evaluatePolicy выполняется в фоновом потоке, поэтому подумайте об этом, если вы пойдете с segue

DispatchQueue.main.async {
    self.performSegue(withIdentifier: "toSecondView", sender: self) 
}
...