Iphone UILabel无法在视觉上刷新 问题
我有一个Iphone UILabel无法在视觉上刷新 问题,iphone,ios,cocoa,uilabel,Iphone,Ios,Cocoa,Uilabel,我有一个UILabel隐藏在几层子视图中,我似乎无法更改它的文本。更新标签的代码位于MyCardSubclass的updateVisualElements方法中。真正奇怪的是,当我记录这些标签的描述时,文本已经更新,但它不可见。下面是它的样子: 在我的视图控制器的viewDidLoad方法中,我初始化了UIScrollView和我的卡对象。我将其cardwiew添加为子视图,如下所示: -(void)viewDidLoad { [super viewDidLoad]; MyCar
UILabel
隐藏在几层子视图中,我似乎无法更改它的文本。更新标签的代码位于MyCardSubclass
的updateVisualElements
方法中。真正奇怪的是,当我记录这些标签的描述时,文本已经更新,但它不可见。下面是它的样子:
在我的视图控制器的viewDidLoad
方法中,我初始化了UIScrollView
和我的卡对象。我将其cardwiew
添加为子视图,如下所示:
-(void)viewDidLoad
{
[super viewDidLoad];
MyCardSubclass *myCard = [[MyCardSubclass alloc]initWithInfo:info andPoint:CGPointMake(5, runningYValue)];
[myCard setParentViewController:self];
[scrollView addSubview:[myCard cardView]];
//Resize scrollView contentSize
}
我的名片
我的卡片子类
我试过的
- 设置文本后调用
[self.totalAmountLabel setNeedsDisplay]
- 使用
[self.totalAmountLabel performSelector:@selector(setText:)with object:amount afterDelay:0.0]
标记
属性获取添加的标签并更改其内容
示例:
UILabel totalAmountLabel = [[UILabel alloc]initWithFrame:CGRectMake(labelWidth,
runningYValue,
labelWidth,
[totalAmountLabel setText:amount];
totalAmountLabel.tag = 100;
[toReturn addSubview:totalAmountLabel];
然后在您的updateVisualElements()
UILabel *tempTotalAmountLabel = (UILabel *)[self.view viewWithTag:100];
[tempTotalAmountLabel setText:amount];
修好了!问题并不在于我试图设置标签或绘制视图 我没有正确地使用我的初始值设定项来初始化我的内容视图,只初始化了一次 我在我的子类中删除了这个覆盖
-(UIView *)cardView
{
[self setContentView:[self contentViewFromCardInfo:self.cardInfo]];
return [super cardView];
}
我还从我的超类中的-(UIView*)cardwiew
方法中获取代码,并将其放入-(UIView*)buildcardwiew
方法中,然后将cardwiew属性访问器重写为它应该是的内容
-(UIView *)cardView
{
if(!_cardView)
_cardView = [self buildCardView];
return _cardView;
}
感谢您的意见和评论。从哪里调用updateVisualElements?我没有看到它被调用。我没有包含该部分,但是在收到通知后,我关闭了一个模态视图控制器,然后调用updateVisualElements。我只是确认一下,你看到updateVisualElements中的NSLog语句打印出来了吗?我真的在尝试验证该方法是否确实被调用?是的,我可以验证这些日志是否正在打印,该方法是否确实被调用。标签的初始值如何?在更改文本之前,可以在UI中查看初始值吗?将文本设置为IB中与众不同的内容,然后首先查看您是否看到了这一点。如果你不知道,这是一个很大的线索。
-(UIView *)cardView
{
[self setContentView:[self contentViewFromCardInfo:self.cardInfo]];
return [super cardView];
}
-(UIView *)cardView
{
if(!_cardView)
_cardView = [self buildCardView];
return _cardView;
}