1

我有一个TableViewController转入一个TabBarViewController.

我知道如何通过 segue 传递我的对象,而不是通过像TabBarViewController它的标签共享这样的关系。

我怎样才能做到这一点? 从 TabView 有没有办法访问 TabBarViewControllers 成员变量?

更新:

到目前为止,这就是我解决问题的方法,但我并不热衷于使用 AppDelegate 来做到这一点......

将以下内容添加到WhateverYouNamedYourAppDelegate.h

@class myObjectIWantToPass;
@property (strong, nonatomic) myObjectIWantToPass *object;

然后将以下内容添加到您想要传递的数据的视图类文件中。如果您计划将其传递到另一个视图,我将假设您知道如何在此文件中设置您的对象。

WhateverYouNamedYourAppDelegate *appDelegate = 
(WhateverYouNamedYourAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.object = object;

然后你做一些类似的工作从目标视图类中的 appDelegate 检索对象。

WhateverYouNamedYourAppDelegate *appDelegate = (WhateverYouNamedYourAppDelegate *)[[UIApplication sharedApplication] delegate];
object = appDelegate.object;
4

2 回答 2

1

您可以创建单例类,以便所有控制器都可以访问单例中的这些变量。请参阅下面的代码

单例类.h

@interface SingletonClass : NSObject {
    NSString *someString;
}

@property(nonatomic, retain)NSString *someString;

+(id)shared;

@end

单例类.m

#import "SingletonClass.h"

static SingletonClass *aShared;

@implementation LibShared
@synthesize someString;

+(id)shared
{
    if (aShared == nil) {
    aShared = [[self alloc] init];
    }
    return aShared;
}

-(id)init
{
   if (self = [super init]) {

   }
}

-(void)dealloc
{
  [someString releease];
  [super dealloc];
}

在标签栏中,您可以在 SingletonClass 上设置变量:

[[SingletonClass shared] setSomeString:@"Value_Set"];

在 tableViewController 上,可以获取 SingletonClass 上 someString 变量的属性:

NSString *string =  [[SingletonClass shared] someString];
于 2012-07-11T08:34:46.593 回答
0

这里不需要单例模式。相反,您可以- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender像往常一样向前发送数据对象,您只需要在UITabBarController'sviewControllers属性中找到正确的 viewController 即可。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"MyTabBarSegue]) {
        UITabBarController *tabBarController = segue.destinationViewController;

        // Either set the index here, if you know for sure which viewController is which, or
        // Enumerate the viewControllers for isKindOfClass:[MYCustomViewController class] to be robust and change-proof
        MYCustomViewController *myVC = [[tabBarController viewControllers] objectAtIndex:0];
        myVC.dataObject = self.dataObject;
    }
}
于 2012-07-16T08:03:36.030 回答