Ios Can';t在以编程方式加载的XIB中访问和设置UILabel的文本
这是我第一次在StackOverflow上发帖——我在这篇文章上发帖太久了。希望这里的社区能提供帮助 我已经设置了一个UIScrollView/PageControl,可以分页4页。我尝试将.xib加载到ScrollView中4次,每次都使用不同的文本和图像 不幸的是,我能够加载xib,但无法更改文本/图像,我不知道为什么。我认为这可能与无法访问ViewController中加载的NIB的UILabel有关 以下是cardwiew.xib(cardwiew.h)的.h文件: 我将UIImageView和UILabel插座从xib连接到CardView.h 现在在我的ViewController中,我在scrollView中添加了4次xib:Ios Can';t在以编程方式加载的XIB中访问和设置UILabel的文本,ios,uiscrollview,xib,uipagecontrol,Ios,Uiscrollview,Xib,Uipagecontrol,这是我第一次在StackOverflow上发帖——我在这篇文章上发帖太久了。希望这里的社区能提供帮助 我已经设置了一个UIScrollView/PageControl,可以分页4页。我尝试将.xib加载到ScrollView中4次,每次都使用不同的文本和图像 不幸的是,我能够加载xib,但无法更改文本/图像,我不知道为什么。我认为这可能与无法访问ViewController中加载的NIB的UILabel有关 以下是cardwiew.xib(cardwiew.h)的.h文件: 我将UIImageV
@implementation BMViewController
- (void)viewDidLoad
{
[super viewDidLoad];
for (int i = 0; i < 4; i++) {
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * i;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
CardView *subview = [[BMTutorialCardView alloc] initWithFrame:frame];
//The following line doesn't change the text.
subview.cardLabel.text = @"This line doesn't change the text on the label";
[self.scrollView addSubview:subview];
}
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * 4, self.scrollView.frame.size.height);
}
@BMViewController的实现
-(无效)viewDidLoad
{
[超级视图下载];
对于(int i=0;i<4;i++){
CGRect帧;
frame.origin.x=self.scrollView.frame.size.width*i;
frame.origin.y=0;
frame.size=self.scrollView.frame.size;
CardView*子视图=[[BMTutorialCardView alloc]initWithFrame:frame];
//下一行不会更改文本。
subview.cardLabel.text=@“此行不会更改标签上的文本”;
[self.scrollView addSubview:subview];
}
self.scrollView.contentSize=CGSizeMake(self.scrollView.frame.size.width*4,self.scrollView.frame.size.height);
}
我不确定subview.cardLabel.text为什么实际上没有更改文本。看起来subview.cardLabel是nil,但我清楚地看到UILabel和iOS模拟器运行时在xib中的默认文本。好的,假设您已经在interface builder中创建了xib并链接了IBOutlets,我认为这些行在initWithFrame中
UIView *xibView = [[[NSBundle mainBundle] loadNibNamed:@"BMTutorialCardView" owner:self options:nil] objectAtIndex:0];
[self addSubview:xibView];
基本上是在视图的顶部创建视图,因此尽管您正在更改在界面中创建的标签,但由于您将重复的视图放在上面,因此无法看到更改。试着去掉我上面引用的句子
编辑:另外,正如Phillip指出的,为什么CardView.h会显示“BMTutorialCardView”,为什么在.m和文件名中的所有内容都显示“CardView”时,您要用“BMTutorialCardView”xib初始化视图?有两个不同的类让你互相混淆吗?实际上,我看你的代码越多,我就越不明白你想做什么…替换这两行:
UIView *xibView = [[[NSBundle mainBundle] loadNibNamed:@"BMTutorialCardView" owner:self options:nil] objectAtIndex:0];
[self addSubview:xibView];
为此:
self = [[[NSBundle mainBundle] loadNibNamed:@"CardView" owner:self options:nil] objectAtIndex:0];
self.frame = frame;
UIViewController *controller = [[UIViewController alloc] initWithNibName:@"CardView" bundle:nil];
CardView *subview = (CardView *)controller.view;
subview.frame = frame;
我不认为这是最好的解决方案,但它应该适用于你的情况,而不必改变太多
…正如其他人已经说过的,您需要检查您的类名(bmtutorialcardwiew
vscardwiew
)
编辑:
我想我更喜欢。确保将nib文件中的文件所有者更改为UIViewController
,并将其视图
出口连接到CardView
(或调用UIView
子类的任何内容)
然后,您可以删除在initWithFrame:
方法中不起作用的代码,并在viewdiload
中替换这一行:
CardView *subview = [[BMTutorialCardView alloc] initWithFrame:frame];
为此:
self = [[[NSBundle mainBundle] loadNibNamed:@"CardView" owner:self options:nil] objectAtIndex:0];
self.frame = frame;
UIViewController *controller = [[UIViewController alloc] initWithNibName:@"CardView" bundle:nil];
CardView *subview = (CardView *)controller.view;
subview.frame = frame;
不确定答案,但
@implementation cardwiew
看起来很奇怪。cardwiew
和bmtutorialcardwiew
应该如何关联?抱歉-复制和粘贴错误。它们是一样的。谢谢你的帮助,一切顺利。看起来这是另一个视图问题上的视图。