有没有办法制作一个全局标签
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】:我认为你最好使用协议来做到这一点
【讨论】:
以上是关于有没有办法制作一个全局标签的主要内容,如果未能解决你的问题,请参考以下文章