0

我有 uipopovercontroller 具有 uitableview 并且我想在 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];
}

还设置了接口构建器和委托中连接的所有 ibotle。但我的问题是我的 didSelectRowAtIndexPath 方法正在调用但 activityindicator 没有动画。

我在使用协议单击表视图行时调用 webservice,所以我需要 uiactivityindicatorview 进行动画处理,直到获得 webservice 的输出。

任何建议将不胜感激。

4

2 回答 2

0

检查activity和table的View可能是UIActivityIndi​​cator在UITableView后面。并检查它是否被隐藏

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"didSelectRowAtIndexPath called");
    [tableview bringSubviewToFront:actiIndi];
    [actiIndi startAnimating];
}
于 2012-07-18T04:44:00.357 回答
0

对于您所说的,didSelectRowAtIndexPath: 中有更多代码。也就是说,您正在从那里调用的方法调用 webservice。

我认为所有的问题是你正在同步调用 web 服务。您必须记住,用户界面中的每项更改仅在您的方法完成后才有效。因此,如果您没有将控制权返回给主界面循环,startAnimating 将什么也不做。

解决方案是,当您调用调用 web 服务的方法时,而不是这样:

[actiIndi startAnimating];
[self callWebservice:fooObject];

写这个:

[actiIndi startAnimating];
[self performSelector:@selector(callWebservice:) withObject:fooObject afterDelay:0.0];

然后您将控制权返回给主循环,活动指示器将开始旋转,然后尽快调用另一个方法。

于 2012-07-18T04:44:33.890 回答