在具有内容视图和视图控制器的 tabbarcontroller 之间传递数据
Posted
技术标签:
【中文标题】在具有内容视图和视图控制器的 tabbarcontroller 之间传递数据【英文标题】:Passing data between tabbarcontroller which have content view and view controllers 【发布时间】:2014-10-21 02:48:47 【问题描述】:我使用的是 xib 而不是故事板。
AppDelegate.m
ViewController1 *ViewController1 = [[ViewController1 alloc] init];
ViewController1.title = NSLocalizedString(@"1", @"1");
ViewController2 *ViewController2 = [[ViewController2 alloc] init];
ViewController2.title = NSLocalizedString(@"2", @"2");
BannerViewController *_bannerViewController1;
_bannerViewController1 = [[BannerViewController alloc] initWithContentViewController:ViewController1];
BannerViewController *_bannerViewController2;
_bannerViewController2 = [[BannerViewController alloc] initWithContentViewController:ViewController2];
_tabBarController = [[UITabBarController alloc] init];
_tabBarController.viewControllers = @[_bannerViewController1,_bannerViewController2];
self.window.rootViewController = _tabBarController;
[self.window makeKeyAndVisible];
ViewController1.m
#import "ViewController1.h"
#import "ViewController2.h"
ViewController2 *cvc = [[ViewController2 alloc] initWithNibName:nil bundle:nil];
cvc.strReceiveValue= "Testing";
ViewController2.h
@property (strong, retain) NSString *strReceiveValue;
ViewController2.m
- (void)viewDidLoad
[super viewDidLoad];
NSLog(@"strMortgageAmount: %@", strMortgageAmount);
知道为什么我未能获得价值吗?我在想这可能与 initWithContentViewController 有关。
【问题讨论】:
【参考方案1】:**
见下方更新
**
如果我正确理解了这个问题,您正在创建一个标签栏控制器(在 AppDelegate 中?)并希望将信息传递给与标签栏控制器关联的视图控制器?
如果是这样,看看这个:
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
[tabBarController setDelegate:self];
UINavigationController *dashTVCnav = [[tabBarController viewControllers] objectAtIndex:0];
然后:
DashTVC *dashTVC = [[dashTVCnav viewControllers] objectAtIndex:0];
dashTVC.managedObjectContext = self.managedObjectContext;
dashTVC.uuid=uuid;
然后在 DashTVC.h 中:
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) NSString *uuid;
这样,您将 managedObjectContect 和 uuid 传递给 dashTVC 控制器。
我希望我明白你在问什么......
+++++++++++++++ 更新 +++++++++++++++++++++
原始发帖人很友好地给了我他的示例代码。我将在此处发布其中的部分内容以及我的修复,以供将来通过搜索找到此内容的人使用
有几个问题,但简而言之,没有任何东西传递给 vc2:
第一,appDelegate 没有传递任何内容
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
CGRect bounds = [[UIScreen mainScreen] bounds];
self.window = [[UIWindow alloc] initWithFrame:bounds];
self.window.backgroundColor = [UIColor whiteColor];
ViewController1 *vc1 = [[ViewController1 alloc] init];
vc1.title = NSLocalizedString(@"VC1", @"VC1");
ViewController2 *vc2 = [[ViewController2 alloc] init];
vc2.title = NSLocalizedString(@"VC2", @"VC2");
//--- I added this as a test
vc2.strReceiveValue=@"foo";
// and now foo shows up in the debug console when vc2 is fixed
_tabBarController = [[UITabBarController alloc] init];
_tabBarController.viewControllers = @[
[[BannerViewController alloc] initWithContentViewController:vc1],
[[BannerViewController alloc] initWithContentViewController:vc2],
];
self.window.rootViewController = _tabBarController;
[self.window makeKeyAndVisible];
return YES;
接下来需要修改viewController2.m中的viewWillAppear
- (void)viewWillAppear:(BOOL)animated
// line below missing
[super viewWillAppear:animated];
NSLog(@"output: %@", strReceiveValue);
希望这会有所帮助,并享受为 ios 开发的乐趣!
【讨论】:
这也是一个很好的审查答案***.com/questions/5210535/… 我已经更新了问题,我认为现在应该清除它以解释问题......希望。 首先,你显然已经编辑了一堆代码,这很好,虽然可能有其他问题,但这是从哪里来的? NSLog(@"strMortgageAmount: %@", strMortgageAmount);你的 NSString 属性是 *strReceiveValue; 这是一个错字:) NSLog(@"strReceiveValue: %@", strReceiveValue); 让我创建示例并在 Dropbox 中分享它。我是 iOS 新手,但我真的很喜欢玩它...感谢您的帮助..以上是关于在具有内容视图和视图控制器的 tabbarcontroller 之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章
在 splitViewController 的 detailView 中设置 barButtonItem 的标题
如何让 ScrollView 半透明并使其背后的内容具有交互性?