2015-08-14 54 views
2

我正在创建应用程序,并且要访问用户必须输入的应用程序的main screenfingerprint。我已将它设置为当fingerprint正确时,它会以编程方式将segue执行为连接到main view controllernavigation controller。这里是我的代码:指纹验证后不显示UIBarButtonItem

let context = LAContext() 
    var error: NSError? 

    if context.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: &error) { 

     let reason = "Authenticate with Touch ID" 

     context.evaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reason, reply: 
      {(succes: Bool, error: NSError!) in 

       if succes { 

        self.showOrHide(true) 
        ProgressHUD.showSuccess("Success") 

        self.performSegueWithIdentifier("passwordCorrectSegue", sender: nil) 

       } else { 

       } 

     }) 

    } else { 

     self.touchIDLabel.hidden = true 
     self.touchIDImage.hidden = true 

    } 

问题是,当我perform the segue和它去navigation controller足见view controller,该UIBarButtonItem's不显示在屏幕的左上角和右上角。您仍然可以点击屏幕的左上角和右上角,并且这些按钮的操作将会运行。问题是UIBarButtonItem's只是没有显示。我尝试过的另一件事是,您也可以选择输入密码,并且当密码正确时,它会转到下一个view controller ......并且它可以很好地工作。有谁知道如何解决这一问题?

UIBarButtonItems只是当我试图执行使用指纹法该方法时,使用方法

self.performSegueWithIdentifier("passwordCorrectSegue", sender: nil) 

不显示。

回答

0

我有完全相同的问题:我有2个VC,每个都能够继续到第三个;如果我从第一个开始继续,则右侧栏按钮项目不可见(但仍然有效),但是如果我从第二个开始继续,则右侧栏按钮项目可见。

我想这是iOS9中的一个错误。

我所用的解决方法是强制权栏按钮项的初始化在目标视图控制器“的viewDidLoad”:

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Force right bar button item when using performSeguewithIdentifier (bug in iOS9?) 
    navigationItem.rightBarButtonItem = UIBarButtonItem(
    image: UIImage(assetIdentifier: .Profile), 
    style: UIBarButtonItemStyle.Plain, 
    target: self, 
    action: Selector("displayUser")) 
} 

这解决了该问题对我来说(至少直到苹果修复了这个bug) 。