【发布时间】:2015-11-10 11:39:18
【问题描述】:
我创建了一个由 CloudKit 备份的登录页面。 我想知道如果登录名具有特定值,如何创建条件转场,然后根据该值将用户引导到视图控制器
具体来说,我要连接三个 Segue:
登录 id segue:
LoginSuccessSegue员工标签栏 id segue:
idStaffTabBar学生标签栏 id segue:
idStudentTabBar
第一次转场
LoginSuccessSegue:
登录视图控制器有一个 show segue id LoginSuccessSegue 连接到员工标签栏控制器和学生标签栏控制器。
第二次转场
idStaffTabBar:
执行queryProfileType() 后,它会在列表中查找配置文件类型,以检查用户配置文件是教师值还是其他值。然后,如果这是真的,“LoginSuccessSegue”将自动将用户带到员工标签栏控制器,“StaffBookedVC.self”,使用its segueidStaffTabBar`
第三轮
idStudentTabBar:
如果用户不是老师,则在按下登录按钮后重定向到学生标签栏控制器,“stdBookingVC.self”使用 idStudentTabBar 或
如何在多个视图中使用 segues 和云套件查询实现自动条件登录?
这是登录按钮的代码:
@IBAction func btnSignInTapped(sender: UIButton)
{
let userEmailAddress = userEmailAddressTextField.text
let userPassword = userPasswordTextField.text
if(userEmailAddress!.isEmpty || userPassword!.isEmpty)
{
notifyUser("Empty fields", message: "all fields are required")
}
print("fetching is in progress")
queryProfileType()
print("\nfetching had stopped")
}//end of signInbtn
func queryProfileType()
{
queryCredentials()
print("\nProfile Query starting")
//execute query
let organizers = ["Teacher || Youtuber || Instagrammer || "]
let predicate = NSPredicate(format: "ProfileType = '\(organizers)' ")
print("\nThis is the predicate\n\(predicate)")
let query = CKQuery(recordType: "RegisteredAccounts", predicate: predicate)
publicDatabase!.performQuery(query, inZoneWithID: nil) { results, error in
if (error != nil)
{
print(error)
}else
{
if (results! == organizers)
{
self.performSegueWithIdentifier("idStaffTabBar", sender: StaffBookedVC.self)
}else{
self.performSegueWithIdentifier("idStudentTabBar", sender: stdBookingVC.self)
}
print("\(results)\nthese are the printed results")
}
}
let firstFetch = CKFetchRecordsOperation()
let secondFetch = CKFetchRecordsOperation()
secondFetch.addDependency(firstFetch)
let queue = NSOperationQueue()
queue.addOperations([firstFetch, secondFetch], waitUntilFinished: false)
}
这是故事板的图片Storyboard
如果您的答案将包含这些方法,请给我一些示例: shouldPerformSegueWithIdentifier 和 prepareForSegue
这对我也不起作用
self.presentViewController(SignInNavigationVCTabBars, animated: true,
{ results, error in
if (results! == organizers)
{
self.performSegueWithIdentifier("idStaffTabBar", sender: StaffUITABbarVC.self)
}else{
self.performSegueWithIdentifier("idStudentTabBar", sender: StdUITABbarVC.self)
}
}
`
【问题讨论】:
-
不清楚问题本身。但是你的做法是正确的。根据不同的情况,你会用不同的标识符调用
performSegueWithIdentifier -
程序在条件处停止。如果有谁可以帮忙,请分享你的答案
-
您需要调试程序在哪里停止,在什么条件下停止?在 ViewController 更改时停止?停在segue?尝试在 prepareForSegue 中设置一个断点。
-
这是错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<appname.MasterViewController: 0x7d27d7a0>) has no segue with identifier 'idStudentTabBar'' *** First throw call stack:>是因为在这个my storybaord 中看不到主视图和标签栏视图之间的导航控制器吗? -
您的故事板没有 ID 为 idStudentTabBar 的视图。确保你有那一套。
标签: ios swift uitabbarcontroller segue cloudkit