在另一个 UIViewController 中从 UiViewController 更改 UILabel 文本

Change UILabel Text from UiViewController in another UIViewController

好吧,看来我犯了一些错误,我现在还没有用指针和初始化得到它...

这是问题所在:

我有一个用于注册过程的 UIViewController,名为:RegisterViewController

它在其 ViewDidLoad 中调用一个方法:

[self performSelector:@selector(activateUsernamePopover) withObject:nil afterDelay:0.1];

此方法如下所示:

- (void) activateUsernamePopover {
PopoverViewController *popcontroller = [[PopoverViewController alloc] init];

popcontroller.title = nil;

[popcontroller setPopoverText:@"Test"];

FPPopoverController *popover = [[FPPopoverController alloc] initWithViewController:popcontroller];

popover.arrowDirection = FPPopoverArrowDirectionUp;

popover.border = NO;
popover.tint = MgoGreyTint;

[popover setShadowsHidden:true];

[popover presentPopoverFromView:_usernameInput]; }

这将使 Popover 可见。这很好用。

但我确实有几个 TextField,我想在其中显示具有不同文本的 Popover。

所以我在 PopoverViewController 中创建了一个名为 setPopoverText 的方法:

- (void)setPopoverText:(NSString *)text {
[_popoverLabel setText:text];
[_popoverLabel setNeedsDisplay]; }

我在我的 activateUsernamePopover 方法中调用它:

[popcontroller setPopoverText:@"Test"];

问题来了。

我可以在 PopoverViewControllers 方法 setPopoverText 中记录文本,没问题。

但它并没有改变文本。我这样记录了 _popoverLabel :

NSLog(@"%@",_popoverLabel);

及其(空)。

我知道指针或我正在使用的 PopoverViewController 实例存在一些问题,但 objective c 我还不是很清楚。

有人为我解答了吗?

如何更改该 UILabel 的文本?

我也可以想象在实例化时将文本提供给控制器。

类似的东西:

PopoverViewController *popcontroller = [[PopoverViewController alloc] initWithPopoverText:@"Test"];

但我不知道怎么做。当弹出窗口可见时,我不需要更改文本。当用户点击 TextField 或其他地方时,它将被释放。

到目前为止谢谢。

因为当您调用 init 方法时,UILabel 尚未创建。这样做的方法是将文本保留在 NSString 属性.

在你的 PopoverViewController 中,像这样创建 init 方法

@interface ViewController : UIViewController
- (id)initWithPopoverText:(NSString *)text;
@end

在实现文件中,保留 属性 和 viewDidLoad 中的文本,您可以将文本设置为标签。

@interface PopoverViewController ()
    @property (nonatomic) NSString *popoverText;
@end

@implement PopoverViewController
- (id)initWithPopoverText:(NSString *)text {
    self = [super init];
    if (self) {
        _popoverText = text;
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    //set label.text here
    self.popoverLabel.text = self.popoverText;
}
@end