有没有办法制作全球标签

时间:2012-07-25 12:27:07

标签: objective-c cocoa-touch xcode4.3

我想从另一个你知道的控制器中更改标签的文本,比如定义一个全局变量。

5 个答案:

答案 0 :(得分:1)

定义并创建其属性并在AppDelegate中分配UILabel

现在在整个申请中的任何地方使用该标签

AppDelegate *objAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[self.view addSubView:objAppDelegate.label]  // your gobal label added

在任何地方更改文字

[objAppDelegate.label setText:@"New Text"];

答案 1 :(得分:0)

有多种方法可以做到这一点。不过,您可以更具体地说出您的问题。

您可以让其他视图控制器可以访问您的标签。这样做,您需要知道从哪里想要访问标签的拥有视图控制器。

您可以在UIApplicationDelegate的子类中存储对标签的引用,并使用[[UIApplication getSharedApplication]委托]访问该标签,并从任何地方访问它。如果你这样做,不要忘记在标签被破坏时没有那个参考。

但是,如果不了解您想要实现的内容以及原因,我不能说这是否可行,使得UILable对象可以从其视图的控制器外部访问。最有可能的不是。

答案 2 :(得分:0)

a)将指向标签的指针传递给控制器​​B并用它来改变文本。

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

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

b)大部分时间是最合理的。 a)不干净。 c)是一种矫枉过正。

答案 3 :(得分:0)

随着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后,您的标签将显示新文本。

答案 4 :(得分:-1)

我认为你最好使用协议来做到这一点