我有一个名为TimerViewController
的自定义视图控制器及其子类FirstViewController
和FourthViewController
。
我在名为FirstViewController
的{{1}} FirstViewController
h中声明了.
的实例。
在controller
viewDidLoad
的{{1}}方法中,我有:
FourthViewController
在故事板中,我已将视图控制器ID声明为.m
并声明了自定义类controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"];
。然后,在mainController
的{{1}}我有:
FourthViewController
然而,这会输出FourthViewController
。
为什么会这样?
答案 0 :(得分:2)
mainLab
必须为nil
。所以你的插座可能没有连接到你的XIB。
顺便说一句,将stringWithFormat:
与不是格式的字符串一起使用是浪费的。
答案 1 :(得分:1)
你忽略了告诉我们你项目的其余部分,我只是不确定它是什么。
我启动Xcode只是为了快速完成这个过程很简单。
将UI标签拖到您的XIB
控制点击标签到.h
我做了测试
#import "SOViewController.h"
- (void)viewDidLoad
{
[super viewDidLoad];
self.mainLabel.text = @"This is my label";
NSLog(@"%@", self.mainLabel.text);
}
我的.h看起来像这样:
#import <UIKit/UIKit.h>
@interface SOViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *mainLabel;
@end
这是自定义类的一部分吗?还有其他事情发生吗?如果它是一个香草标签,它应该使用前面提到的代码没有问题。
答案 2 :(得分:1)
看起来您的mainLab
尚未创建。在nil对象上调用方法时,该方法会自动返回nil。确保在运行此代码行之前实际创建标签。
答案 3 :(得分:0)
在实例化之后,您无法访问另一个控制器的标签(或任何其他UI元素),因为它的viewDidLoad方法尚未运行。如果要在另一个控制器中设置标签的文本,则必须将文本传递给该控制器,并使其在viewDidLoad方法中的标签上设置文本。所以不是这个:
controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"];
controller.mainLab.text = [NSMutableString stringWithFormat:@"This is a string"];
你需要这样做:
controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"];
controller.mainLabText = @"This is a string";
其中mainLabText是您在FourthViewController中创建的字符串属性。然后在FourthViewController的viewDidLoad:
中填充标签self.mainLab.text = self.mainLabText;