Iphone 单击UIBarButtonim后刷新视图
我的导航栏上有一个刷新按钮Iphone 单击UIBarButtonim后刷新视图,iphone,objective-c,xcode,uiview,Iphone,Objective C,Xcode,Uiview,我的导航栏上有一个刷新按钮 buttonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(buttonItemClicked)]; self.navigationItem.rightBarButtonItem = buttonItem; -(void)buttonItemClicked{ NSLog
buttonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(buttonItemClicked)];
self.navigationItem.rightBarButtonItem = buttonItem;
-(void)buttonItemClicked{
NSLog(@"buttonItemclicked");
myView.labelName.text = nil;
myView.otherLabelName.text = nil;
[spinner startAnimating]
[spinnerView setHidden:NO];
[self requestAPI];
[spinner stopAnimating];
[spinnerView setHidden:YES];
}
如果我进出视野,效果很好。但是当我在buttonItemClicked中调用相同的方法时,它不起作用。我还尝试在action方法中调用view方法,但这也不起作用
我试图做的是将我的标签设置为nil,添加我的UIActivityIndicatorView
并在再次设置标签后将其删除
我已经尝试过[self.view setNeedsDisplay]
刷新它本身可以工作,但动画无法工作
有什么建议吗?试试
[myView设置需要显示]代码>动画不起作用,因为您使用相同的方法调用startAnimating和stopAnimating(和setHidden)。
渲染将在方法调用结束时开始。
你需要设置
[spinner stopAnimating];
[spinnerView setHidden:YES];
在requestAPI
中
编辑:
使用大中央调度。比如:
- (void)buttonItemClicked {
myView.labelName.text = nil;
myView.otherLabelName.text = nil;
[spinner startAnimating]
[spinnerView setHidden:NO];
[self requestAPI];
}
- (void)requestAPI {
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSURL *url = [NSURL URLWithString:@"http://example.com"];
NSData *data = [NSData dataWithContentsOfURL:url];
NSString *stringResult = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
[spinner stopAnimating];
[spinnerView setHidden:YES];
myView.labelName.text = stringResult;
});
});
}
@Sinetris如果将“我的标签”设置为“零”并启动动画,则在我的动作方法中效果良好,即动画。如果我调用requestAPI,动画就不起作用。不知道是什么原因造成了这种情况。@Magnus requestAPI做了什么?如果您从web获取数据(或者您的方法运行几秒钟),您需要另一个线程(请参阅Grand Central Dispatch for“simplified”线程和AsittpRequest for async web调用)。我从web服务获取数据,并将得到的响应放入UILabels中。但是我不太明白为什么它在我的视图方法中有效,而在我的uibarbuttonite操作方法中无效。@Sinetris我尝试在我的操作方法中启动一个新线程,它工作得很好。唯一的问题是我在控制台中得到了很多东西,比如:uu NSAutoreleaseNoPool():NSCFString类的对象0xaa23f20在没有池的情况下自动释放-只是泄漏。知道我该如何处理这个问题吗?@Magnus添加了一个使用GCD的示例(需要iOS>=4.0)