从xib文件推送segue不在故事板中?

时间:2014-06-13 14:08:21

标签: ios uistoryboard

我正在尝试完成某些事情,我正在寻找一些提示。我开始研究一个由一个xib文件组成的项目。后来我升级到xcode 5并且很快我的其他界面文件开始使用我的故事板但是我保留了我的旧xib(主要是因为我如何将方法传递给它)并简单地称之为:

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

最近我添加了新功能,点击标注后,我想准备一个segue,以便显示新视图。 首先在xib界面中。我想知道我是否可以从我的mapView(不是在故事板中)准备并调用一个view / segue(在故事板中)。 或者,如果我可以简单地将mapView放入或复制并粘贴到我的故事板中,然后将我的segue连接器绘制到我的新视图中。因为我不认为我必须将mapView添加到我的"故事情节"但我还是想打电话使用上面公布的方法。 但是,如果这些都不可行,请提出另一种方法。 谢谢 的更新 我已经将我的xib移动到我的故事板界面,但是我遇到了一个小问题

当我从xib调用我的地图时,它会放大到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;
        transferViewController.option=@"na";

    }
}

然后在视图中加载了地图 位置确实调到0,断点显示所有这些代码都是通过步进但我提供的坐标区域不是正在显示的内容。(跨度或区域) (但是,当我打电话给我的旧xib时,它工作正常)

- (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;
}

2 个答案:

答案 0 :(得分:1)

在mapView中,您应该可以在callout方法中执行以下操作:

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

然后在mapView中,您可以覆盖prepareForSegue来执行任何准备工作,然后展示您的viewController。

答案 1 :(得分:0)

您无法在xib定义的控制器和故事板定义的控制器(或两个不同的故事板中的控制器之间)之间调用segue。您可以使用UIStoryboard方法instantiateViewControllerWithIdentifier:在Storyboard中实例化控制器,然后在代码中推送或显示它。从您的问题中不清楚为什么您不想将基于xib的控制器移动到您的故事线中#34;。您可以在那里创建一个新的控制器,如果您想要沿着那条路线复制并粘贴xib文件中的视图。