Objective c 有没有办法制作一个全球标签

Objective c 有没有办法制作一个全球标签,objective-c,cocoa-touch,xcode4.3,Objective C,Cocoa Touch,Xcode4.3,我想更改来自另一个控制器的标签文本,例如定义全局变量。有多种方法。不过,你可以把你的问题表达得更具体一些 可以使其他视图控制器可以访问标签。要执行此操作,您需要知道所属的视图控制器,无论您从何处访问标签 或者,您可以在UIApplicationLegate的子类中存储对标签的引用,并使用[[UIApplication getSharedApplication]delegate]访问该标签,然后从任何地方访问它。如果您这样做了,不要忘记在标签被销毁时取消该参考 然而,在不知道您想要实现什么以及为什

我想更改来自另一个控制器的标签文本,例如定义全局变量。

有多种方法。不过,你可以把你的问题表达得更具体一些

可以使其他视图控制器可以访问标签。要执行此操作,您需要知道所属的视图控制器,无论您从何处访问标签

或者,您可以在UIApplicationLegate的子类中存储对标签的引用,并使用[[UIApplication getSharedApplication]delegate]访问该标签,然后从任何地方访问它。如果您这样做了,不要忘记在标签被销毁时取消该参考


然而,在不知道您想要实现什么以及为什么的情况下,我不能说这是否可取,让一个可创建的对象可以从其视图的控制器外部访问。很可能不是

在AppDelegate中定义并创建其属性和alloc UILabel

现在,在整个应用程序中的任何地方使用该标签

AppDelegate *objAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[self.view addSubView:objAppDelegate.label]  // your gobal label added
在任何地方更改其文本

[objAppDelegate.label setText:@"New Text"];
a) 将指向标签的指针传递给控制器B,并使用它更改文本

b) 在控制器b中定义协议并定义委托成员。在控制器a(拥有标签)中实现委托方法,并设置作为委托方法参数传递的文本。调用控制器B中的委托方法,并将要设置的文本传递给标签

c) 将控制器A注册为某个通知的观察者。控制器B中的Post通知 并将文本添加到用户信息字典中。在控制器a中实现一个方法,该方法接收通知并设置在用户信息字典中传递的文本


b) 在大多数情况下是最合理的。a) 它不干净。c) 是一种过激的手段。

我认为您最好使用协议来实现这一点

随着iOS 5自动引用计数的引入,这将强制执行某些编程规则和限制,某些编程结构和公认的实践不再可能。extern的使用是链接器不赞成的基于C的指令之一。实际上,如果您尝试在启用ARC的情况下使用,将出现链接错误

但是,在iOS 5中使用全局变量仍然是非常可能的,您只需使用#define指令即可

以下步骤演示了使用全局变量的一种可能的解决方案


1) 声明全局变量:

    NSString * gvar;
    @interface AppDelegate : UIResponder <UIApplicationDelegate>

3) 在两个ViewController中导入此AppDelegate文件


4) 将gvar分配给第一个ViewController中的UILabel:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
     self.label.text= gvar;
}
gvar = [self.songArray objectAtIndex:indexPath.row];

5) 从第二个ViewController更改其值:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
     self.label.text= gvar;
}
gvar = [self.songArray objectAtIndex:indexPath.row];


返回上一个viewController后,您的标签将显示新文本。

您是如何尝试解决此问题的?我正在尝试使用UILabel执行此操作。它不断告诉我错误和错误。我真的不知道为什么这不起作用-这对我来说是有意义的。