Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Can';t在以编程方式加载的XIB中访问和设置UILabel的文本_Ios_Uiscrollview_Xib_Uipagecontrol - Fatal编程技术网

Ios Can';t在以编程方式加载的XIB中访问和设置UILabel的文本

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

这是我第一次在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:

@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
vs
cardwiew

编辑:

我想我更喜欢。确保将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
应该如何关联?抱歉-复制和粘贴错误。它们是一样的。谢谢你的帮助,一切顺利。看起来这是另一个视图问题上的视图。