2014-06-13 48 views
1

我正在尝试完成某些操作,并且正在寻找一些提示。我开始研究一个由一个xib文件组成的项目。后来我升级到xcode 5,并很快为我的界面文件的其余部分我开始使用我的故事板,但我保留我的老xib(主要原因是我如何通过它的方法),并简单地将其称为:从xib文件中推入segue而不是在storyboard中?

mapViewController *mapView=[[mapViewController alloc]initWithNibName:@"mapViewController" bundle:nil location:0 option:@"poe"]; 

最近,我添加了新功能,并且在点击标注后,我想准备显示新视图的细节。 首先在xib界面。我想知道是否可以从我的mapView(不是在storyboard中)准备并调用view/segue(在故事板中)。 或者,如果我可以简单地删除或复制并粘贴我的mapView到我的故事板,然后绘制我的segue连接器到我的新视图。因为我不认为将mapView添加到我的“故事情节”是必要的,但是我仍然想要调用上面提到的方法。 但是,如果这些都不可行,请提出另一种方法。 感谢 UPDATE 我提出我的厦门国际银行,以我的故事板界面不过我面临的一个小问题

当我打电话给我从厦门国际银行的地图会放大到在init方法提供一个特定的位置。我传递相同的参数,但我有一个小麻烦重建我的旧的结果在我的故事板

if (([receivedRainObject isEqualToString:@"Natural"])) { 

// mapViewController *mapView=[[mapViewController  //alloc]initWithNibName:@"mapViewController" bundle:nil location:0 option:@"na"]; 

// self.navigationItem setHidesBackButton:NO animated:NO]; 
//  [self.navigationController setNavigationBarHidden:NO animated:YES]; 
    //  [self.navigationController pushViewController:mapView animated:NO]; 
      [self performSegueWithIdentifier:@"countryMap" sender:self]; 
    } 

然后在视图准备srgue

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"countryMap"]) { 
     mapViewController *transferViewController=segue.destinationViewController; 
     transferViewController.location=0; 
     [email protected]"na"; 

    } 
} 

那时的负载地图 位置确实为0,断点显示所有这些代码正在步进,但我提供的坐标区域不是显示的内容(跨度或区域) (但是当我打电话给我的o厦门国际银行LD正常工作)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    { 

    // Do any additional setup after loading the view from its nib. 

    if (location==0) 
    { 

     CLLocationCoordinate2D location1; 
     location1.latitude=(double)15.435786; 
     location1.longitude=(double)-61.318447; 


        MKCoordinateRegion region; 
        MKCoordinateSpan span; 
        span.latitudeDelta=0.50; 
        span.longitudeDelta=0.40; 
        region.span=span; 
        region.center= location1; 

        [mapView setRegion:region animated:TRUE]; 
        [mapView regionThatFits:region]; 
       } 
} 

我的MapView的INIT

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil location:(int)num option:(NSString *)row 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     self.location=num; 
     self.option=row; 

    } 
    return self; 
} 

回答

0

不能调用控制器之间的厦门国际银行定义控制器和故事板定义的一个之间的赛格瑞(或在两个不同故事板)。您可以使用UIStoryboard方法instantiateViewControllerWithIdentifier来实例化故事板中的控制器,然后将其推入或呈现在代码中。从你的问题中不清楚你为什么不想将基于xib的控制器移到你的“故事情节”中。你可以在那里创建一个新的控制器,如果你想要走这条路线,从你的xib文件复制并粘贴视图。

+0

我开始移动它等,但得到一些小问题。编辑主要问题 – Sammie

+0

@ user3737880,什么是transferViewController?那是你继续控制的控制器吗?另外,如果您有需要在init方法中运行的代码,则需要为故事板中创建的控制器实现initWithCoder:而不是initWithNibName:bundle :. – rdelmar

+0

是的,这是transfewViewController。我用它来保存或“准备”我想传入的变量。请告知如果没有正确完成。我也显示了我的initWithNibName,但我不明白为什么我需要说initWithCoder。 shouldnt [self performSegueWithIdentifier:@“countryMap”sender:self];已经调用通过旧的initWithNibName传入的变量?并明确表示它正在这样做,但为什么代码执行,而不是地图不显示我想要的位置 – Sammie

1

在你的MapView,你应该能够做这样的事的标注方法:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"YourStoryBoardName" bundle:[NSBundle mainBundle]]; 
YourViewControllerFromStoryBoard *viewController = [sb instantiateViewControllerWithIdentifier:@"YourViewControllerIdentifierInYourStoryBoard"]; 

然后在你的MapView您可以覆盖prepareForSegue做任何准备工作,然后出示您的viewController。

相关问题