uiactivityindicatorview 在 uipopoverviewcontroller iphone 中不起作用
Posted
技术标签:
【中文标题】uiactivityindicatorview 在 uipopoverviewcontroller iphone 中不起作用【英文标题】:uiactivityindicatorview not working in uipopoverviewcontroller iphone 【发布时间】:2012-07-17 13:58:19 【问题描述】:我有具有 uitableview 的 uipopovercontroller,我想在 uitableview 方法的 didselectrowatindexpath 方法中开始为 uiactivityindicatorview 设置动画。这是我的代码。
-(IBAction)btnA_Clicked:(id)sender
self.objuiviewCon = [[myuiviewController alloc] initWithNibName:@"myuiviewController" bundle:nil];
[self.objuiviewCon setDelegate:self];
self.ObjApopCon = [[UIPopoverController alloc] initWithContentViewController:self.objuiviewCon];
[self.ObjApopCon setPopoverContentSize:CGSizeMake(self.objuiviewCon.view.frame.size.width, self.objuiviewCon.view.frame.size.height)];
[self.ObjApopCon presentPopoverFromBarButtonItem:btnA permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
@interface myuiviewController : UIViewController<UITableViewDelegate,UITableViewDataSource>
IBOutlet UITableView *tblList;
IBOutlet UIActivityIndicatorView *actiIndi;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [myarr count];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
NSLog(@"cell called");
cell.textLabel.text = [myarr objectAtIndex:indexPath.row];
return cell;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"didSelectRowAtIndexPath called");
[actiIndi startAnimating];
所有在接口生成器和委托中连接的 iboutle 也被设置。但我的问题是我的 didSelectRowAtIndexPath 方法正在调用但 activityindicator 没有动画。
当我使用协议点击表格视图行时我正在调用 webservice,所以我需要 uiactivityindicatorview 进行动画处理,直到获得 webservice 的输出。
任何建议将不胜感激。
【问题讨论】:
【参考方案1】:对于您所说的,在 didSelectRowAtIndexPath: 中有更多代码。也就是说,您正在从那里调用的方法调用 webservice。
我认为所有问题都是您正在同步调用 web 服务。您必须记住,用户界面中的每项更改仅在您的方法完成后才有效。因此,如果您不将控制权返回给主界面循环,startAnimating 将不会执行任何操作。
解决方案是,当你调用调用 webservice 的方法时,而不是这样:
[actiIndi startAnimating];
[self callWebservice:fooObject];
写这个:
[actiIndi startAnimating];
[self performSelector:@selector(callWebservice:) withObject:fooObject afterDelay:0.0];
然后您将控制权返回给主循环,活动指示器将开始旋转,然后尽快调用另一个方法。
【讨论】:
感谢您回答加布里埃尔。实际上,我已将 Web 服务调用放在评论中,并尝试为指示器设置动画,但它仍然没有动画。 我已将所有代码放在注释中。我的代码仅包含以下内容。 NSLog(@"didSelectRowAtIndexPath 调用"); [actiIndi startAnimating]; 你在哪里调用任何网络服务?我找不到它。 我暂时没有调用任何网络服务。我最初的目标是在单击表格视图行时开始为指示器视图设置动画。【参考方案2】:查看Activity和table的View可能是UIActivityIndicator在UITableView后面。 并检查它是否被隐藏
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"didSelectRowAtIndexPath called");
[tableview bringSubviewToFront:actiIndi];
[actiIndi startAnimating];
【讨论】:
感谢 Cocoa Matters 的回答。它将把 tableview 带到前面。所以 actiIndi 不会显示。以上是关于uiactivityindicatorview 在 uipopoverviewcontroller iphone 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UI第十一节——UIActivityIndicatorView