为UIView动态创建内容的正确方法是什么?

时间:2009-09-30 22:23:43

标签: iphone cocoa-touch uitableview uiview nsurlrequest

我有一个带有项目列表的tableView。进行选择后,将在tableView的navigationController viewController堆栈上推送新的视图控制器。

我的问题是:与推送视图控制器关联的视图层次结构中的一个视图需要在网络呈现内容之前从网络中获取数据。此提取是通过[NSURLRequest requestWithURL:...]异步完成的。将数据传递给需要它的视图并让该视图调用它的重载drawRect方法的正确方法是什么?目前,我这样做:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {


    [_connection release];
    _connection = nil;

    [self performSelectorOnMainThread:@selector(GetDataFromCloudAndCreateView)
                        withObject:nil 
                     waitUntilDone:NO];


}

方法GetDataFromCloudAndCreateView实例化视图形式的数据。不幸的是,没有任何东西呈现。我试过[myView setNeedsDisplay],但它没有效果。

有人可以草拟正确的方法吗?感谢。

1 个答案:

答案 0 :(得分:1)

我过去在这种情况下所做的是在UIViewController方法中创建新的connectionDidFinishLoading:,然后推送它。像这样:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    [_connection release];
    _connection = nil;

    // Code to stop a loading indicator of some kind

    UIViewController *newView = [[SomeViewController alloc] initWithData:fetchedData];
    [self.navigationController pushViewController:newView animated:YES];
}

新控制器上的initWithData:方法根据传递给它的数据处理它需要的任何实例变量,然后当视图加载时,它将根据这些变量绘制视图。

希望能回答你的问题。