我在尝试使用委托中的值计算更新UILabel.text时出现问题(这似乎很慢)。
@interface BTAViewController : UIViewController <ExchangeFetcherManagerDelegate>
@property (weak, nonatomic) IBOutlet UILabel *bidPriceLabel;
@property (strong, nonatomic) FetcherManager *fetcherManager;
@end
我的BTAViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.fetcherManager = [[FetcherManager alloc]init];
double calculateValue = [self.fetcherManager fetchPricesFor];
self.bidPriceLabel.contentMode = UIViewContentModeRedraw;
[self.bidPriceLabel setNeedsDisplay];
self.bidPriceLabel.text = [[NSString alloc] initWithFormat:@"%f", calculateValue];
}];
标签已在此处未显示的方法中正确初始化,并在启动时显示正确的默认值。一旦我执行此代码,标签将获得值0.00000000,因为我的calculateValue尚未计算。
如何等待计算此值,然后显示标签文本?
我无法发布图片,因为我没有足够的声誉......
由于
答案 0 :(得分:0)
您确定计算的值不是纯粹的0还是空?
我要做的是在FetchManager的BTAViewController.m中添加委托回调函数
这样的事情:
BTAViewController.h
//add delegate callback function under @interface
-(void)valueReturned:(float)someValue;
BTAViewController.m
-(void)valueReturned:(float)someValue{
//updates value when the delegate returns the value
self.bidPriceLabel.text = [[NSString alloc] initWithFormat:@"%f", calculateValue];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.fetcherManager = [[FetcherManager alloc]init];
self.fetchManager.delegate = (id)self;
[self.fetchManager getPricesFor];
// double calculateValue = [self.fetcherManager fetchPricesFor];
self.bidPriceLabel.contentMode = UIViewContentModeRedraw;
[self.bidPriceLabel setNeedsDisplay];
[self.view addSubview:self.bidPriceLabel];
}];
在FetchManager.h和.m
中FetcherManager.h
@property (retain,nonatomic)id<ExchangeFetcherManagerDeelgate>delegate;
-(void)getPricesFor;
FetcherManager.m
@synthesize delegate;
-(void)getPricesFor{
float price;
//calculate price
[self.delegate valueReturned:price];
}
答案 1 :(得分:0)
将标签添加到视图中,将其设置为隐藏(bidPriceLabel.hidden = YES
)。然后,为委托创建并添加一个方法(BTAViewController),在触发时,检查hidden
的{{1}}属性,如果它是UILabel
(隐藏),则设置 bidPriceLabel.hidden = NO ,然后按预期显示UILabel。
完成检索信息后,在TRUE
中调用此方法。