当我点击同一个标签栏控制器时如何打开同一个页面

Posted

技术标签:

【中文标题】当我点击同一个标签栏控制器时如何打开同一个页面【英文标题】:how to open same page when i click on same tab bar controller 【发布时间】:2014-04-19 12:24:32 【问题描述】:

hii 我正在制作一个应用程序,我必须在一个标签栏控制器上提供登录页面,但此登录页面仅在用户未登录但用户已登录时打开,然后此标签栏控制器在登录页面后打开。 我为此编写代码并且它工作正常但是当用户再次单击选项卡栏控制器然后它再次打开登录页面时用户已经登录。所以如何防止这种情况意味着我如何在用户登录后打开登录页面我的代码是:

 (void)viewDidLoad
      
         [super viewDidLoad];
         UIImage *image1 = [UIImage imageNamed: @"logo.png"];
         UIImageView *imageView1 = [[UIImageView alloc] initWithImage: image1];
        self.navigationItem.titleView = imageView1;
         self.navigationItem.leftBarButtonItem = nil;
         self.navigationItem.hidesBackButton = YES;

          @try
           
            NSUserDefaults *def5=[NSUserDefaults standardUserDefaults];
           NSLog(@"%@",[def5 objectForKey:@"id"]);
           if ([[def5 objectForKey:@"id"]isEqualToString:NULL])
             
             storeinformation=[[NSMutableArray alloc]init];
              dict=[[NSMutableDictionary alloc]init];
             [dict setValue:@"Mine Annonser" forKey:@"name"];
               [dict setValue:@"2" forKey:@"id"];
             [storeinformation addObject:dict];

              dict=[[NSMutableDictionary alloc]init];
              [dict setValue:@"Sett inn annonse" forKey:@"name"];
              [dict setValue:@"3" forKey:@"id"];
               [storeinformation addObject:dict];
             
             else
              
                 UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
                Logindisplay *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"log"];
                [self.navigationController pushViewController:vc animated:YES];

               


        

        @catch (NSException *exception)
        
              NSLog(@"error in loading in vc%@", exception.reason);
         

          image1=Nil;
          imageView1=nil;

        




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



           - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
            

              return 1;
             

        - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
           

              return [storeinformation count];
             

           - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
             
                 @try
                    
                       NSUserDefaults *def6=[NSUserDefaults standardUserDefaults];
                         if ([[def6 objectForKey:@"id"]isEqualToString:NULL])
                            
                              static NSString *CellIdentifier=@"afterlogin";
                               UITableViewCell *cell=[tableView  dequeueReusableCellWithIdentifier:CellIdentifier];

                 if (cell==nil)
                     
                    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
                     


                 // arr=[storeinformation objectAtIndex:indexPath.row];
                   //NSLog(@"%@",arr);
                    NSMutableDictionary *dict1=[storeinformation objectAtIndex:indexPath.row];
                UILabel *lbl=(UILabel*)[cell viewWithTag:1];
                lbl.text= [dict1 objectForKey:@"name"];
                UIImageView *img2=(UIImageView*)[cell viewWithTag:100];
                img2.image=[UIImage imageNamed:@"arrows.png"];
             / /  NSLog(@"%@",[storeinformation objectAtIndex:0]);
                   return cell;
               //dict1=Nil;
                // lbl=Nil;
            
            

            @catch (NSException *e)
                
                    NSLog(@"Error in row at index path%@",e.reason);
                 

         

【问题讨论】:

【参考方案1】:

您可以在替代想法 k 中使用此方法,用于以本地平均值存储登录凭据(使用 NSUserDefault ),在 AppDelegate.m 中调用此 NSUserdefault ,此方法用于直接调用特定视图控制器,否则您传递序列在登录视图控制器中。

【讨论】:

以上是关于当我点击同一个标签栏控制器时如何打开同一个页面的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift 3中从标签栏移动时重新加载页面?

Swift 4 - 如何覆盖标签栏将打开视图控制器

移动到其他视图控制器时的标签栏

如何在 swift 中从情节提要中的 didSelectRowAt indexPath 打开视图标签栏控制器?

使用标签栏从另一个视图返回时如何重新加载视图控制器

如何在打开新标签时总是切换到新标签页?