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可能是UIActivityIndi​​cator在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

iOS UIActivityIndicatorView

请教如何让UIActivityIndicatorView永远居中

UI控件篇之UIActivityIndicatorView

UIActivityIndicatorView

iOS控件之UIActivityIndicatorView