Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 根据用户是否已注册/登录,通过segue转换到某个ViewController。国际标准化组织_Ios_Swift_Viewdidload - Fatal编程技术网

Ios 根据用户是否已注册/登录,通过segue转换到某个ViewController。国际标准化组织

Ios 根据用户是否已注册/登录,通过segue转换到某个ViewController。国际标准化组织,ios,swift,viewdidload,Ios,Swift,Viewdidload,我需要创建和应用程序,虽然加载不需要用户注册,但用户可以使用有限的应用程序功能。如果用户已注册/登录,我们需要向他展示更多功能 条件: 应用程序必须具有TabBarController、NavigationController和TableViewControleer。 语言:Swift,Xcode 6.4 我尝试这样做的方式: 我使用故事板添加控制器和分段 有两个序列(类型:«show(例如push)»),标识符为«registeredUser»和«notRegisteredUser»。 我已经

我需要创建和应用程序,虽然加载不需要用户注册,但用户可以使用有限的应用程序功能。如果用户已注册/登录,我们需要向他展示更多功能

条件:

应用程序必须具有TabBarController、NavigationController和TableViewControleer。 语言:Swift,Xcode 6.4

我尝试这样做的方式:

我使用故事板添加控制器和分段

有两个序列(类型:«show(例如push)»),标识符为«registeredUser»和«notRegisteredUser»。 我已经编写了在NavigationController类的方法viewWillDisplay中执行的代码。每次用户按下“设置”按钮时,它都会检查用户是否已注册/登录。根据该检查的结果,将用户定向到特定控制器(如果他/她已注册/登录,则为绿色,如果未注册,则为黄色)。 我没有使用viewDidLoad方法,因为用户在任何时候都可以按下按钮“退出”,应用程序必须立即将他引导到黄色屏幕

class NavigationController:UINavigationController {

    var userisregistred:Bool!

     override func viewDidLoad() {
        super.viewDidLoad()}

    override func viewWillAppear(animated: Bool) {
        userisregistred = UserAccauntUtil.userRegistrationCheck()
        if (userisregistred == false ) {
            self.performSegueWithIdentifier("notRegisteredUser", sender: self)
          }

        else if(userisregistred == true ){
            self.performSegueWithIdentifier("registeredUser", sender: self)
         }
    }
} 
我遇到的问题:

加载应用程序并按下“设置”按钮后,我第一次被重定向到所需的控制器(一切正常),但当我按下“收藏夹”,然后再次按下“设置”按钮时,将再次执行ViewWillbeen中的代码,并将我再次指向黄色控制器,同时返回显示在导航栏左上角的按钮/箭头。因此,我有许多控制器和一个后退按钮

我只需要执行一个转换,而用户应该看到所有控制器:TabBarController、NavigationController。 也许有另一种方法来完成这样的任务。如有任何有用的信息和建议,我将不胜感激

糟糕/简单的解决方案:

使用NotRegistedUser.swift中的代码删除“后退”按钮

class RegisteredUser: UITableViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
            self.navigationItem.setHidesBackButton(true, animated:false);
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

这种解决方案只是消除了症状,但并不能解决问题。

听起来,推送序列不是您想要的。但是,嵌入分段仅限于单个容器视图,因此您需要插入一个中间ViewController,以根据用户的注册状态处理哪个容器视图应该可见

该解决方案详细介绍了它是为iOS 6编写的,但应使用以下情节提要:

它利用了从视图控制器获得多个“自定义”分段的可能性,以绕过单个“嵌入”分段的限制

完整的项目(在目标C中,但很容易翻译成Swift)可在以下位置获得:


的内容是魔术发生的地方,基于外部触发器交换可见视图。

如果在执行序列之前使用
popToRootViewControllerAnimated:
使导航堆栈进入干净状态,会怎么样?(或者,稍微复杂一点,
popToViewController:animated:
如果您想要的在堆栈上,则清理堆栈并继续。)感谢您的建议,但我没有使用这些方法,因此我没有RootViewController。popToRootViewControllerAnimated和popToViewControllerAnimated-无处可去。我的故事板可以在这里查看。