我想更改另一个控制器的标签文本,就像定义全局变量一样。
定义并创建其属性,并在AppDelegate 中分配UILabel
现在,在整个应用程序中,在任何你想要的地方使用该标签
AppDelegate *objAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[self.view addSubView:objAppDelegate.label] // your gobal label added
在的任何位置更改其文本
[objAppDelegate.label setText:@"New Text"];
随着iOS 5引入自动引用计数,强制执行某些编程规则和限制,某些编程构造和可接受的实践不再可能。extern的使用是链接器不赞成的基于C的指令之一。实际上,如果您尝试在启用ARC的情况下使用,则会出现链接错误。
然而,在iOS 5中使用全局变量仍然是非常可能的,你只需要使用#define指令就可以了。
以下步骤演示了使用全局变量的一种可能的解决方案。
1) 声明全局变量:
NSString * gvar;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
2) 初始化全局变量:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
gvar = [[NSString alloc] initWithString:@"Name1"];
return YES;
}
3) 在两个ViewControllers中导入此AppDelegate文件。
4) 在您的第一个ViewController:中将gvar分配给UILabel
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.label.text= gvar;
}
5) 从您的第二个ViewController:更改其值
gvar = [self.songArray objectAtIndex:indexPath.row];
回到上一个viewController后,标签将显示新文本。
有多种方法可以做到这一点。不过,你可以更具体地表达你的问题。
您可以使其他视图控制器可以访问您的标签。这样做,您需要从您想要访问标签的位置了解拥有的视图控制器。
或者,您可以在UIApplicationDelegate的子类中存储对标签的引用,并使用[[UIApplicationgetSharedApplication]delegate]访问该标签,然后从任何地方访问它。如果你这样做了,不要忘记在标签被销毁时将该引用清零。
然而,在不知道你想要实现什么以及为什么的情况下,我不能说这是否可取,让UILable对象可以从其视图的控制器之外访问。很可能不是。
a)将指向标签的指针传递给控制器B,并使用它来更改文本。
b) 在控制器b中定义协议并定义委托成员。在控制器a(拥有标签)中实现委托方法,并将传递的文本设置为委托方法的参数。调用控制器B中的委托方法,并将要设置的文本传递给标签。
c) 将控制器A注册为某个通知的观察者。在控制器B中张贴通知并将文本添加到用户信息字典中。在控制器a中实现一个方法,该方法接收通知并设置用户信息字典中传递的文本。
b) 大多数时候都是最合理的。a) 不干净。c) 太夸张了。
我认为您最好使用协议来完成