在iphone中完成解析时,如何显示标签栏视图?

时间:2010-04-06 13:50:54

标签: iphone uitabbar

我是iphone开发的新手。我创建了一个应用程序,其中第一个标签栏视图,加载网页,在第二个标签栏视图中,它解析xml文件并在表格视图中显示内容。当我单击第二个标签栏时,只有在解析完成后才能看到标签栏视图,直到标签栏显示为未选中的解析时间。我想在解析完成时显示带活动指示标签的标签栏视图。如何我实现了它。请帮帮我。谢谢。

4 个答案:

答案 0 :(得分:1)

如果没有其他相关信息很难说,但我猜您正在解析viewDidLoad()loadView(内的XML文件。但是,解析实际上可能需要时间,并且您正在阻止负责更新UI的主线程。这就是为什么只有在解析完成后才能看到标签栏的原因。

要解决这种情况,您需要推迟显示数据的表视图,显示活动指示符以告知用户正在进行的操作,并启动负责解析XML文件的后台线程。处理XML的线程文件一旦完成,然后停止活动指示器并使用解析的数据设置表视图。

您可以使用可用的API(detachNewThreadSelector:toTarget:withObject:performSelectorOnMainThread:withObject:waitUntilDone:等)轻松完成此操作,但是,您可能需要考虑利用MBProgressHUD来提供您需要的功能包裹在一个非常容易使用的课程中。

答案 1 :(得分:0)

我认为您知道或将能够弄清楚如何使活动指标正常工作。

您可以使用NSXMLparser委托方法来解析xml数据。您可以在模型对象中收集xml数据,这些对象是您在类中解析xml的属性,即一个简单的数组。然后,从您希望收到已完成解析通知的视图中,您可以使用键值观察(KVO)将其注册为这些模型对象的键路径的观察者。一旦这些属性的值发生变化,您的视图(或中间类)将被发送一条消息,然后可以使用该消息来更新显示。

只要发送消息的类符合这些属性的键值编码(KVC),这些消息就会被发送到已注册的观察者。在大多数情况下,通过房产可以使你的伊萨尔人进入。

添加观察者:

- (void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context

收到变更通知:

- (void)didChangeValueForKey:(NSString *)key

查看关键值观察文件:

http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueObserving_Protocol/Reference/Reference.html#//apple_ref/doc/uid/20002299-SW7

答案 2 :(得分:0)

我认为您必须在指定的时间内使用NSTimer类。

执行解析数据的方法(即GetXMLData - 用户定义的方法)方法,

NSTimer *currentTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(GetXMLData:) userInfo:nil repeats:NO];

并使用

启动活动指示器
[activityIndicator startAnimating];

在下面的方法中停止

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
.
.
.
[activityIndicator stopAnimating];

}

我希望你能理解我在说什么...... 如果需要任何帮助,请发表评论......

答案 3 :(得分:0)

  1. 不要在MainThread中进行解析,分离新线程进行解析( [NSThread detachNewThreadSelector:toTarget:withObject:]
  2. 解析后( parserDidEndDocument:)使用 performSelectorOnMainThread 刷新tableView。