有没有办法制作一个全局标签

Posted

技术标签:

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

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

【问题讨论】:

你已经尝试过如何解决这个问题? 【参考方案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】:

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

【讨论】:

以上是关于有没有办法制作一个全局标签的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法制作`react-navigation`的`指标`,适合标签?

有没有办法没有从标签创建标签?

有没有办法在 SCSS 中有条件地替换全局变量?

有没有办法做 gsp 部分而不是标签库?

有没有办法在反应外部的函数内部传递变量

Tailwind CSS:有没有办法定位下一个兄弟姐妹?