我有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的输出。
任何建议将不胜感激。
答案 0 :(得分:0)
检查活动视图和表可能是UIAableView后面的UIActivityIndicator。 并检查它是否被隐藏
- (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];
然后你将控制返回到主循环,活动指示器将开始旋转,然后,将尽快调用另一个方法。