【问题标题】:Is there a way to make a global label有没有办法制作一个全局标签
【发布时间】:2012-07-25 12:27:06
【问题描述】:

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

【问题讨论】:

  • 你已经尝试过如何解决这个问题?

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


【解决方案1】:

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

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

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

在任何地方更改其文本

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

【讨论】:

    【解决方案2】:

    随着 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) 在您的两个 ViewController 中导入此 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,你的标签就会显示新的文本。

    【讨论】:

    • 我正在尝试使用 UILabel 执行此操作。它一直告诉我和错误。我不确定为什么这不起作用 - 这对我来说很有意义。
    【解决方案3】:

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

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

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

    但是,在不知道您想要实现什么以及为什么要实现的更多信息的情况下,我不能说这是否是可取的,使 UILable 对象可以从其视图的控制器外部访问。很可能不是。

    【讨论】:

      【解决方案4】:

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

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

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

      b) 在大多数情况下是最合理的。 a) 不干净。 c) 太过分了。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-12
          • 1970-01-01
          • 1970-01-01
          • 2017-03-26
          • 1970-01-01
          • 2019-05-27
          • 2021-04-19
          • 2017-09-01
          相关资源
          最近更新 更多