我想从另一个你知道的控制器中更改标签的文本,比如定义一个全局变量。
答案 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)
我认为你最好使用协议来做到这一点