Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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 自定义UIView屏幕中不显示UILabel_Ios_Objective C_Iphone_Uiview_Uilabel - Fatal编程技术网

Ios 自定义UIView屏幕中不显示UILabel

Ios 自定义UIView屏幕中不显示UILabel,ios,objective-c,iphone,uiview,uilabel,Ios,Objective C,Iphone,Uiview,Uilabel,下面是我如何实现自定义UiView的 在myView.h文件中 @interface myView : UIView { NSString *message; } ... @property (nonatomic, retain) UILabel *messageLabel; ... @end 在myView.m文件中 @interface myView : UIView { NSString *message; } ... @property (nonatomic, reta

下面是我如何实现自定义UiView的

在myView.h文件中

@interface myView : UIView
{
    NSString *message;
}
...
@property (nonatomic, retain) UILabel *messageLabel;
...
@end
在myView.m文件中

@interface myView : UIView
{
    NSString *message;
}
...
@property (nonatomic, retain) UILabel *messageLabel;
...
@end
此函数将实例化myView并向其添加消息标签

+ (id) initWithText:(NSString *) text
{
    screenBounds = [[UIScreen mainScreen] bounds];
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];

    self = [super initWithFrame:CGRectMake(0, statusBarFrame.size.height, screenBounds.size.width, 40)];

    if (self)
    {
        [self setBackgroundColor:[UIColor redColor]];

        message = [text copy];
        _messageLabel = [[UILabel alloc]initWithFrame:[self frame]];
        [_messageLabel setText:message];
        [_messageLabel setAdjustsFontSizeToFitWidth:YES];
        [_messageLabel setTextAlignment:NSTextAlignmentJustified];
        [_messageLabel setTextColor:[ UIColor blackColor]];
        [self addSubview:_messageLabel];
    }   
   return self;
}

稍后,我将myView作为子类添加到屏幕中的可见视图中。当我运行应用程序时,我可以看到红色的myView,但其中没有显示消息标签。

检查您在标签中设置的文本是否为空,以及

_messageLabel = [[UILabel alloc]initWithFrame:self.frame];

检查您在标签中设置的文本是否为空,以及

_messageLabel = [[UILabel alloc]initWithFrame:self.frame];

当你用Self.Frimit输入你的uIabell时,你必须考虑它父视图中的值。

也许您的第二个参数:y=statusBarFrame.size.height太高了,这就是为什么您的标签不在视图中


尝试用CGRectMake(0. 0,Self.Frask.Wrand,Field.Frase.Health.

>P>)输入您的标签。当您用Self.Frimit输入UIababl时,必须考虑父视图中的值。

也许您的第二个参数:y=statusBarFrame.size.height太高了,这就是为什么您的标签不在视图中


试着用CGRectMake(0,0,self.frame.width,self.frame.height)初始化标签。

我试过这段代码,它成功了。确定没有在其他地方为UILabel设置其他参数?以下是与代码的区别:

  • 对于方法,我将您的“+”替换为“-”
  • 我更改了uilabel框架以进行初始化
  • 为标签添加背景色(仅用于检查)


我尝试了这个代码,它成功了。确定没有在其他地方为UILabel设置其他参数?以下是与代码的区别:

  • 对于方法,我将您的“+”替换为“-”
  • 我更改了uilabel框架以进行初始化
  • 为标签添加背景色(仅用于检查)


之前:我曾经在执行后台操作的
backgroundOP.m
文件中调用
initWithText()
show()
。这些函数总是在单独的线程中执行

现在:我将调用移动到委托方法中的
initWithText()
&
show()
方法,并将委托添加到呈现UIViewController,即我希望视图显示在其中的viewController.m文件中。现在我从另一个文件(即从
backgroundOP.m
)调用这个委托,问题就解决了。现在,
UIView
UILabel
都可以在屏幕上看到

但是我不明白为什么从后台线程函数添加UIView只显示UIView而不显示其内容/子视图

在我的show()函数中,我使用这个调度队列将myView添加到显示键窗口。像下面的代码

UIWindow *window = [[UIApplication sharedApplication] keyWindow];
dispatch_async(dispatch_get_main_queue(), ^{
[window addSubview:self]; // self represents myView object
 });

如果有人知道这种行为的原因,请告诉我。

以前:我曾经在执行后台操作的
backgroundOP.m
文件中调用
initWithText()
&
show()
。这些函数总是在单独的线程中执行

现在:我将调用移动到委托方法中的
initWithText()
&
show()
方法,并将委托添加到呈现UIViewController,即我希望视图显示在其中的viewController.m文件中。现在我从另一个文件(即从
backgroundOP.m
)调用这个委托,问题就解决了。现在,
UIView
UILabel
都可以在屏幕上看到

但是我不明白为什么从后台线程函数添加UIView只显示UIView而不显示其内容/子视图

在我的show()函数中,我使用这个调度队列将myView添加到显示键窗口。像下面的代码

UIWindow *window = [[UIApplication sharedApplication] keyWindow];
dispatch_async(dispatch_get_main_queue(), ^{
[window addSubview:self]; // self represents myView object
 });


如果有人知道这种行为的原因,请告诉我。

标签很可能没有正确的位置或大小。您在哪里使用文本调用initWithText?尝试在UILabel初始化中将[self frame]更改为[self bounds]。@Suryasubenthian我尝试了
[self bounds]
即使这样,它也不会显示标签。仅显示红色背景视图visible@beyowulf我从另一个文件调用initWithText。我使用
[[myView alloc]initWithText:@“我的消息”]show]来调用它。show函数会将视图添加到窗口中,因为我可以在屏幕中看到我的视图,但只有UiLabel没有显示在窗口中。标签很可能没有正确的位置或大小。您在哪里调用initWithText?尝试在UiLabel初始化中将[self frame]更改为[self bounds]。@Suryasubenthian我尝试了
[self bounds]
即使这样,它也不会显示标签。仅显示红色背景视图visible@beyowulf我从另一个文件调用initWithText。我使用
[[myView alloc]initWithText:@“我的消息”]show]来调用它。show函数将把视图添加到窗口中,这样我就可以在屏幕上看到我的视图,但只有UiLabel没有显示在窗口中。我也在运行时检查过。标签未设置为空白。消息是NSString,它正确地包含该字符串。我也尝试了self.frame,但它没有显示标签。尝试同时硬编码[u messageLabel=[[UILabel alloc]initWithFrame:CGRectMake(0,0,20,20)]_messageLabel.text=@“asd”;我试过了,但是没有显示出来。我也尝试过改变文本颜色,但没有效果。我也在运行时检查过。标签未设置为空白。消息是NSString,它正确地包含该字符串。我也尝试了self.frame,但它没有显示标签。尝试同时硬编码[u messageLabel=[[UILabel alloc]initWithFrame:CGRectMake(0,0,20,20)]_messageLabel.text=@“asd”;我试过了,但是没有显示出来。我也尝试过更改文本颜色,但没有效果。开始时我使用的是
CGRectMake(0,0,self.frame.width,self.frame.height)
,但后来我认为超出了边界,所以我将其替换为
[self-frame]。当
[自帧]