在另一个 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
好吧,看来我犯了一些错误,我现在还没有用指针和初始化得到它...
这是问题所在:
我有一个用于注册过程的 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