如何从第一个选项卡更改tabbarcontroller的所有选项卡的变量?

时间:2016-06-09 10:06:18

标签: ios objective-c tabbarcontroller

我在@property NSString *memberid;中有tabbarcontrller

我会在所有viewcontorllers中使用它。

我希望用memberid之一更新viewcontroller。这样其他视图控制器就可以使用新值。

如何更新NSString

3 个答案:

答案 0 :(得分:1)

不要在这里听别人,他们只是在喂你不好的做法。没有冒犯,但硬编码的东西不是它的工作原理。它不是如何运作的。

一个简单易行的解决方案可能是添加一个类,某种类型的" Manager"或"服务"。你可以称之为MemberService。这堂课'工作是完成与您的成员相关的所有工作。我不知道你的应用程序,但对于你所问的问题,这个假设就足够了。当然可以随意调整一下。

此类可以是单例,具体取决于Member的工作方式。如果您有多个成员,则可以在该服务类中包含成员列表,或者只是包含所需值的属性。

在这里,假设有一个成员,我会尽量做到最简单,所以你只需要一个(常量?)字段来保存成员ID。

现在,只需要在您的控制器中提供服务,您可以询问"嘿服务,ID号码是什么?"无论你问什么地方,他都会回复。使用该架构,您可以询问5次,从20个不同的选项卡中,它始终有效。无需混合导航控制器等等。

您的UI不应该负责管理您的逻辑。控制器处理视觉效果,动画等。所有其余的应该在逻辑类(视图模型,服务,等等)中移动。

现在,在多个不同的控制器中使用相同的属性(甚至单个)可能有点烦人,您仍然必须每次都写下该属性。比上述更清晰的解决方案是继承您的UIViewControllers

简单:创建一个...... BaseViewController(你可以找到一个比这更性感的名字)继承:UIViewController。添加一个属性,您的单件服务MemberService,并确保在viewDidLoad的{​​{1}}中实例化/准备它;也许你可以在那里设置会员ID和其他东西,这是你的选择。

现在,选项卡中使用的所有viewcontrollers都会更改其超类(在文件顶部)。而不是BaseViewController,请使用您的: UIViewController。 Tadaa,他们总是拥有会员服务,你可以100%确定无论有多少标签,你有可用的服务,并且已经加载并准备踢屁股(因为它已经被在viewdidLoad中准备。)

答案 1 :(得分:0)

//在 AppDelegate tabcontroller 分解一个变量,将 tabcontroller 分配给此变量,您可以 tabcontroller 使用整个应用程序。示例代码在这里

Appdelegate *appdelegate = [[UIApplication sharedApplication] delegate];

appdelegate.tabController.memberid = @"1";

答案 2 :(得分:0)

我在我的一个项目中正在做这样的事情,

NSArray *tabArr = [self.tabBarController viewControllers];

UINavigationController *navController1 = [tabArr objectAtIndex:1];

DraftViewController *dvc = [navController1.viewControllers firstObject];

dvc.screenTitle = self.screenTitle;


UINavigationController *navController3 = [tabArr objectAtIndex:3];
SentViewController *svc = [navController3.viewControllers firstObject];

svc.screenTitle = self.screenTitle;

UINavigationController *navController2 = [tabArr objectAtIndex:2];
OutboxViewController *ovc = [navController2.viewControllers firstObject];

ovc.screenTitle = self.screenTitle;

我在第一个标签(tabbarcontroller的第一个viewcontroller)

中这样做

我已将navigationcontroller嵌入到每个viewcontroller(标签)中。所以,我得到第一个导航控制器,然后得到VC(标签)。

如果您没有将导航控制器嵌入到标签VC中,则[tabArr objectAtIndex:index]会直接返回视图控制器。