我在@property NSString *memberid;
中有tabbarcontrller
。
我会在所有viewcontorllers
中使用它。
我希望用memberid
之一更新viewcontroller
。这样其他视图控制器就可以使用新值。
如何更新NSString
?
答案 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]
会直接返回视图控制器。