-1

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

4

5 回答 5

1

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

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

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

在任何地方更改其文本

[objAppDelegate.label setText:@"New Text"];
于 2012-07-25T12:44:42.553 回答
0

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

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

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

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

于 2012-07-25T12:41:18.990 回答
0

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

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

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

b) 在大多数情况下是最合理的。a) 不干净。c) 是矫枉过正。

于 2012-07-25T12:45:30.070 回答
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)在您的两个 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,你的标签就会显示新的文本。

于 2012-07-25T13:07:16.003 回答
-1

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

于 2012-07-25T12:46:10.217 回答