ios - 如何根据第一次加载来加载TabBarController或UIViewController

标签 ios objective-c uiviewcontroller uitabbarcontroller segue

很抱歉,如果这是一个重复的问题,但我已经查看了很多问题,但没有找到正确的答案。

基本上,如果应用程序是首次启动,则应加载带有“操作方法”屏幕的 UIViewController。如果不是首次启动,则会加载选项卡栏 Controller 。

为此,我有一个 UIViewController 作为初始 View Controller ,然后模态转至选项卡栏和 uiviewcontroller

enter image description here

这两个模式转场称为pushTabBar 和pushHowToUse。

这是“firstviewcontroller”的代码

@implementation FirstViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self isFirstRun];
    // Do any additional setup after loading the view.
}
- (BOOL) isFirstRun
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"isFirstRun"])
    {

        [self performSegueWithIdentifier: @"pushTabBar" sender: self];

        return NO;

    }

    [defaults setObject:[NSDate date] forKey:@"isFirstRun"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    NSLog(@"right before");
    [self performSegueWithIdentifier: @"pushHowToUse" sender: self];



    return YES;
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"pushTabBar"]) {

        GetInfoViewController *getInfoViewController = segue.destinationViewController;
        NSLog(@"loadtabbar");

    }
    if ([segue.identifier isEqualToString:@"pushHowToUse"]) {

         TutorialViewController *tutorialViewController = segue.destinationViewController;
        NSLog(@"loadhowto");

    }
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

我不确定要为标签栏 Controller 推送/加载什么:

  GetInfoViewController *getInfoViewController = segue.destinationViewController;

是我要加载的第一个选项卡栏的 View Controller 。

我这样做正确吗?我应该使用导航根 Controller 吗?

提前致谢

最佳答案

如果 FirstViewController 的唯一目的是决定要呈现哪个其他 Controller (顺便说一句,调用模态 Segue PushToTabBar 是一个令人困惑的名称 - 您正在进行演示而不是推送),则不需要 FirstViewController。您可以在选项卡栏 Controller 的第一个选项卡中的 Controller 的 viewDidAppear 方法中执行逻辑。如果是第一次启动,请以模态方式呈现 TutorialViewController,不带动画,这样用户首先会看到它。当用户完成教程后,关闭该 Controller ,然后您将返回到第一个选项卡 View Controller 。您应该将选项卡栏 Controller 索引 0 处的那个 Controller 的 segue 连接到 TutorialViewController。

关于ios - 如何根据第一次加载来加载TabBarController或UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18221721/

相关文章:

ios - TableView索引从rootcontroller到detailcontroller(UINavigationController)

ios - 在 Swift 中 segue 之后从堆栈中移除(删除) View /viewController 的正确方法

ios - 如何确定 CTLine 之后的 CTLine

ios - 如何更改 iOS 7.1.1/iPhone 5s 上的导航栏按钮颜色

iphone - UIImagePickerController 保存文件路径 iOS/iPhone

objective-c - 将应用程序从碳迁移到 cocoa

objective-c - 在 OSX 中为给定进程禁用定时器合并

iOS 通用链接 "NOT"关键字不起作用

objective-c - 实现复制方法 - 复制整行

ios - 从另一个 View Controller 以编程方式选择 TableView 单元