iPhone:如何在我的 TabBarViewController 和各个选项卡之间共享信息?

Posted

技术标签:

【中文标题】iPhone:如何在我的 TabBarViewController 和各个选项卡之间共享信息?【英文标题】:iPhone: How do I share information between my UITabBarViewController and the individual Tabs? 【发布时间】:2012-07-11 06:24:54 【问题描述】:

我有一个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;

【问题讨论】:

【参考方案1】:

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

SingletonClass.h

@interface SingletonClass : NSObject 
    NSString *someString;


@property(nonatomic, retain)NSString *someString;

+(id)shared;

@end

SingletonClass.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];

【讨论】:

我不确定我是否想要一个出色的课程,例如将信息从一个视图传递到另一个视图......必须有更好的方法是吗?我的问题是我使用 segue 将信息从一个视图传递到另一个视图,但是从我的标签栏视图到单个选项卡没有 segue,所以我不能以同样的方式传递它。 单身是你最好的选择。 Apple 也这样做,例如使用 NSUserDefaults。它适用于这种情况。【参考方案2】:

这里不需要单例模式。相反,您可以像往常一样在- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 中转发数据对象,您只需要在UITabBarControllerviewControllers 属性中找到正确的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;
    

【讨论】:

以上是关于iPhone:如何在我的 TabBarViewController 和各个选项卡之间共享信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 iphone 中为我的网站添加有效且受信任的安全证书?

如何在我的 iPhone 应用程序中显示来自服务器端的推送通知

如何使用我的 iOS 应用程序在我的 iPad/iPhone 中打开 PDF 文件?

如何在我的 iphone 应用程序中显示我的应用程序的内存使用情况

如何防止在我的 Next/React 项目中使用 iPhone 上的 AirPlay

如何在我的 iPhone 应用程序中访问 iPod 库