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
中转发数据对象,您只需要在UITabBarController
的viewControllers
属性中找到正确的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 应用程序中显示我的应用程序的内存使用情况