0

我需要将 theFirstViewController(第一个选项卡)的特定实例变量(一个对象)返回到 theSecondViewController(第二个选项卡),所以我没有使用 segue。

在选项卡之间传递数据的最佳实践是什么?我进行了广泛的搜索,但没有找到明确的答案。我已经尝试了我认为几乎所有选项,除了使用单例。为此目的使用单例是否可以接受?无论如何,我都需要存档数据。提前致谢。

4

1 回答 1

0

您的一种选择是将您的 ViewControllers 声明为您的应用程序委托的实例变量

向您的视图控制器类添加一个属性 say(A and B) 。

假设您想在视图控制器之间传递对象,您可以为每个控制器添加一个属性:

@interface AViewController : UIViewController {
    BViewController *b;
}

@property (nonatomic, retain) BViewController *b;;

@end

@interface BViewController : UIViewController {
    AViewController *a;
}

@property (nonatomic, retain) AViewController *a;

@end

当您初始化视图控制器时,您可以将此属性设置为先前初始化的对象上下文。

您提到了一个标签栏控制器。如果您的视图控制器通过 IB 连接,您只需在应用程序委托 applicationDidFinishLaunching: 方法中设置这些参数,然后显示标签栏控制器:

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>
{

    AViewController *aViewController;
    BViewController *bViewController;
    ...
}

@property (retain) IBOutlet AViewController *aViewController;
@property (retain) IBOutlet BViewController *aViewController;

@end

@implementation MyAppDelegate

...

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
...

    aViewController.b = bViewController;

    bViewController.a = aViewController;

    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];
}

创建可以使用的 viewControllers 对象

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];

ViewController* viewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
于 2013-05-07T09:51:51.127 回答