我正在尝试完成某些工作,并且正在寻找一些技巧。我开始研究一个包含一个xib文件的项目。后来我升级到xcode 5,很快我的界面文件的其余部分就开始使用情节提要,但是我保留了旧的xib(主要原因是我将方法传递给它),并像这样简单地称呼它:

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

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

当我从xib调用 map 时,它将放大到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";

    }
}

然后在视图中加载了 map
location的值确实为0,并且断点告诉我所有这些代码都在逐步执行,但是我提供的坐标区域不是所显示的(范围或区域)。
(但是,当我打电话给我的旧臂时,它工作正常)
- (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];
               }
}

我的 map 视图的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;
}

最佳答案

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

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

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

10-08 11:53
查看更多