【问题标题】:Refresh view after UIBarButtonItem is clicked点击 UIBarButtonItem 后刷新视图
【发布时间】:2011-09-13 10:09:36
【问题描述】:

我的导航栏上有一个刷新按钮

buttonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(buttonItemClicked)];
    self.navigationItem.rightBarButtonItem = buttonItem;
-(void)buttonItemClicked{
    NSLog(@"buttonItemclicked");
    myView.labelName.text = nil;
    myView.otherLabelName.text = nil;
    [spinner startAnimating]
    [spinnerView setHidden:NO];
    [self requestAPI];
    [spinner stopAnimating];
    [spinnerView setHidden:YES];
  }

如果我进出视图,它工作正常。但是当我在 buttonItemClicked 中调用相同的方法时,它不起作用。我也尝试在我的操作方法中调用视图方法,但这也不起作用。

我要做的是将我的标签设置为零,添加我的UIActivityIndicatorView 并在再次设置标签后将其删除。

我已经尝试过[self.view setNeedsDisplay];

它自己的刷新工作,但动画不起作用。

有什么建议吗?

【问题讨论】:

    标签: iphone objective-c xcode uiview


    【解决方案1】:

    试试[myView setsNeedToDisplay];

    【讨论】:

      【解决方案2】:

      动画不起作用,因为您在同一方法中调用 startAnimating 和 stopAnimating(和 setHidden)。 渲染在方法调用结束时开始。 你需要设置

      [spinner stopAnimating];
      [spinnerView setHidden:YES];
      

      requestAPI.

      编辑:

      使用 Grand Central Dispatch。喜欢:

      - (void)buttonItemClicked {
        myView.labelName.text = nil;
        myView.otherLabelName.text = nil;
        [spinner startAnimating]
        [spinnerView setHidden:NO];
        [self requestAPI];
      }
      
      - (void)requestAPI {
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
          NSURL *url = [NSURL URLWithString:@"http://example.com"];
          NSData *data = [NSData dataWithContentsOfURL:url];
          NSString *stringResult = [[NSString alloc] initWithData:data
                                                         encoding:NSUTF8StringEncoding];
          dispatch_async(dispatch_get_main_queue(), ^{
            [spinner stopAnimating];
            [spinnerView setHidden:YES];
      
            myView.labelName.text = stringResult;
          });
      
        });
      }
      

      【讨论】:

      • @Sinetris 如果将我的标签设置为 nil 并启动动画,在我的操作方法中它可以正常工作,即动画。如果我调用 requestAPI,动画将不起作用。不知道是什么原因造成的。
      • @Magnus requestAPI 做什么?如果您从 Web 获取数据(或您的方法运行几秒钟),您需要另一个线程(查看 Grand Central Dispatch 的“简化”线程和 ASIHTTPRequest 的异步 Web 调用)。
      • 我从 Web 服务获取数据并将得到的响应放入 UILabels 中。但我不太明白为什么它在我的视图方法中有效,而不是在 UIBarButtonItem 的操作方法中。
      • @Sinetris 我尝试在我的操作方法中启动一个新线程,它工作正常。唯一的事情是我在控制台中得到很多东西说:__NSAutoreleaseNoPool(): NSCFString 类的对象 0xaa23f20 自动释放,没有适当的池 - 只是泄漏。知道我该如何解决这个问题吗?
      • @Magnus 添加了一个使用 GCD 的示例(需要 iOS >= 4.0)
      猜你喜欢
      • 2019-05-30
      • 2017-04-15
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多