有没有办法制作一个全球性的标签



我想更改另一个控制器的标签文本,就像定义全局变量一样。

定义并创建其属性,并在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) 太夸张了。

我认为您最好使用协议来完成

最新更新