ios7:转换到/从LoginViewController转移到其他ViewControllers

时间:2014-07-19 19:13:16

标签: objective-c ios7 login storyboard viewcontroller

我是ios-development的新手。我有3个Vc的以下场景。请在此处找到屏幕截图:scenario VC1连接到LoginVC。单击VC1中的按钮,我转到LoginVC并成功登录后返回VC1,否则会显示一个警告框。还有一个"取消" LoginVC上的选项。如果用户决定不登录,他可以点击取消按钮。

VC2中有一个按钮,点击我想要最终进入VC3的按钮。然而,在我去VC3之前,我想看看用户是否已经登录。 如果用户已经登录,那么我转到VC3 否则,我想去LoginVC并成功登录我想去VC3。在击中"取消" ,我想回到VC2。一旦进入VC3,我总是必须在点击"返回"之后返回VC2。按钮。

我的问题是: *取消场景*: 我可以从VC1或VC2转到LoginVC。当我在LoginVC时,如何区分源VC? 根据我的源VC,我可能必须转到VC1(源:VC1)或VC2(源:VC2)。我怎样才能做到这一点? 成功登录: 如果source是VC1,请在成功登录后转到VC1 如果source是VC2,则在成功登录后,我会转到VC3,最后在单击后退按钮后转到VC2。 我怎么能这样做?

我尝试使用modal-segues在VC&之间进行转换,然后在LoginVC中使用以下代码来区分源VC'

if ([self.presentingViewController isMemberOfClass:[VC1 class]])

但是这个没有用。我们如何处理这种情况?非常感谢帮助。谢谢:))

2 个答案:

答案 0 :(得分:0)

在这种情况下我通常做的是制作一个表示我的来源的公共财产(我的意思是我来自的控制人)。

所以在LoginVC.h接口声明中添加,

// I assumed LoginVC subclasses UIViewController
@interface LoginVC : UIViewController 

    @property (strong, nonatomic) NSString *sourceController;

@end

然后在VC1中实现prepareForSegue方法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
     if([segue.identifier isEqualToString@"<TheSegueIdentifierYouSetInStoryboard>"]){
          UIViewController *loginVC = [segue destinationController];
          loginVC.sourceController = @"VC1";
     }
}

现在登录vc,你总是可以说

if([sourceController isEqualToString@"VC1"]){
    // do your thing
}
else{
    // do your other thing
}

如果您需要,请随时让我进一步解释

答案 1 :(得分:0)

您的解决方案应该有效。但这里有一个替代方案也有效:

当您使用导航控制器时,您可以检查以前的控制器。它们由UINavigationController堆叠起来。

为此,请获取前一个viewControllers的数组:

NSArray * previousControllers = self.navigationController.viewControllers;

然后遍历它们以查看最后一个视图控制器的类类型。

UIViewController * last = previousControllers[previousControllers.count -1];

if([last isKindOfClass:[VC1 class]]){
//Got it
}