uiactivityindicatorview不在uipopoverviewcontroller iphone中工作

时间:2012-07-17 13:58:20

标签: iphone ios ipad uipopovercontroller uiactivityindicatorview

我有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];
}

在界面构建器和委托中连接的所有iboutle也都已设置。但我的问题是我的didSelectRowAtIndexPath方法正在调用但activityindicator没有动画。

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

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

检查活动视图和表可能是UIAableView后面的UIActivityIndi​​cator。 并检查它是否被隐藏

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"didSelectRowAtIndexPath called");
    [tableview bringSubviewToFront:actiIndi];
    [actiIndi startAnimating];
}

答案 1 :(得分:0)

对于你所说的,didSelectRowAtIndexPath中还有一些代码:也就是说,您从一个在那里调用的方法调用webservice。

我认为所有问题都是你同步调用webservice。您必须记住,用户界面中的每个更改仅在您的方法完成后才有效。因此,如果您没有将控制权返回到主界面循环,则startAnimating将不执行任何操作。

解决方法是,当您调用调用webservice的方法时,而不是:

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

写下这个:

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

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