ViewController不接受来自其他ViewController的值

时间:2014-03-21 17:27:49

标签: ios iphone uiviewcontroller uisplitviewcontroller

我正在whirlyglobe开展一项计划。

当程序启动时,在视图中加载

,从该代码动画到地图的一部分
 [globeViewC animateToPosition:MaplyCoordinateMakeWithDegrees(-122.4192, 37.7793) time:1.0];

这很好但是当我在masterView控制器中选择一个单元格时,我试图让地图设置为动画,所以我有这个

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    if ([[[[TypesArray objectAtIndex:indexPath.row]objectForKey:@"regions"]objectForKey:@"region"]isEqualToString:@"Caribbean"])    
    {

        TestViewController *testView=[[TestViewController alloc]init];

        // Start up over San Francisco

        [testView.globeViewC animateToPosition:MaplyCoordinateMakeWithDegrees(-122.4192, 37.7793) time:1.0];

        NSLog(@"test");
    }

"试验"显示在日志中但它没有动画到地图上的点。 我已将#import "TestViewController.h"添加到此文件的顶部并

@property(nonatomic,
strong) WhirlyGlobeViewController *globeViewC;

已添加到TestViewController.h

#import <UIKit/UIKit.h>
#import "WhirlyGlobeComponent.h"
#import "ConfigViewController.h"

// Map or globe or startup
typedef enum {MaplyGlobe,MaplyGlobeWithElevation,Maply3DMap,Maply2DMap,MaplyNumTypes} MapType;

//The Test View Controller brings up the WhirlyGlobe Component
// and allows the user to test various functionality.

@interface TestViewController : UIViewController <WhirlyGlobeViewControllerDelegate,MaplyViewControllerDelegate,UIPopoverControllerDelegate>
{
    /// This is the base class shared between the MaplyViewController and the WhirlyGlobeViewController
    MaplyBaseViewController *baseViewC;
    /// If we're displaying a globe, this is set
    WhirlyGlobeViewController *globeViewC;
    /// If we're displaying a map, this is set
    MaplyViewController *mapViewC;
    UIPopoverController *popControl;
}

// Fire it up with a particular base layer and map or globe display
- (id)initWithMapType:(MapType)mapType;
@property(nonatomic,strong) NSString *parse;
@property(nonatomic,strong) WhirlyGlobeViewController *globeViewC;
@property(nonatomic,strong) MaplyViewController *mapViewC;
@end

2 个答案:

答案 0 :(得分:0)

试试这个

TestViewController *testView=  [[TestViewController alloc] initWithNibName:@"Page1" bundle:nil];

OR

TestViewController *testView = [self.storyboard instantiateViewControllerWithIdentifier:@"viewControllrID"];

答案 1 :(得分:0)

我相信你的事情有点混乱...... 假设你的masterviewcontroller是你的车,你的testvc是轴,而你的WhirlyGlobeViewController就是你的车轮。

你现在正在做的是:我正在我的车里按一个没有车轴和车轮的按钮,所以我订购一个车轴,我希望(不存在的)车轮能够滚动。这没有任何意义。您必须将车轴连接到车上,然后将车轮固定在车轴上。

你的whirlyglobe在testviewcontroller中的viewdidload(我猜)附加(初始化),但是从不调用该方法。 你说testviewcontroller中的行是有效的,那是因为(我猜)你是独立使用你的testviewcontroller而且是自动调用viewdidload。

从这里你有两个选择。第一个是你的地球可用的地方是你的所有程序,然后它应该是MasterViewController的属性或实例变量 而不是TestViewController。然后,您可以将testviewcontroller的viewdidload方法中的代码复制到masterviewviewcontroller的viewdidload方法中。 (whirly globe初始化的部分) 然后你必须通过

来调用你的动画
[globeViewC animateToPosition:MaplyCoordinateMakeWithDegrees(-122.4192, 37.7793) time:1.0];
NSLog(@"test");

另一个选择是testviewcontroller应该是独立的,只有globe应该在这里。那么你应该通过使用pushViewController或添加一个childviewcontroller来显示控制器的某个地方,例如:

TestViewController *testView=[[TestViewController alloc]init];

//If you have a navigation view controller
[self.navigationController pushViewController: testView animated:YES];

//If you don't
[self addChildViewController:testView]; // testView's viewDidLoad will be called here
[self.view addSubview:testView.view];    
NSLog(@"test");