gpt4 book ai didi

ios - UITableView 在有数据之前没有弹出数据

转载 作者:行者123 更新时间:2023-11-29 02:57:08 25 4
gpt4 key购买 nike

我正在使用 hpple 从网页获取数据并将其显示在 TableView 中,但我希望单元格在没有数据或无法获取数据时显示“无数据”。但正因为如此,当数据加载时,它会在 View Controller 上闪烁大约一秒钟的无数据,这里是我正在使用的代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
switch (section) {
case 0:
if ((_deli.count > 0)) {
return _deli.count;
}
else {
return 1;
}
break;
case 1:
if ((_entrees.count > 0)) {
return _entrees.count;
}
else {
return 1;
}
break;
}
return 0
}

然后

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";


UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

}
//[UIColor colorWithRed:191.0f/255.0f green:48/255.0f blue:48/255.0f alpha:1.0]
cell.textLabel.textColor = [UIColor whiteColor];
cell.textLabel.font = [UIFont fontWithName:@"TimesNewRomanPS-BoldMT" size:17.0f];

if (indexPath.section == 0) {
if ([tableView numberOfRowsInSection:0] == _deli.count ) {
Items *thisDeli = [_deli objectAtIndex:indexPath.row];
cell.textLabel.text = thisDeli.title;

}
else { cell.textLabel.text = @"No Data Avaiable";
}

}
else if (indexPath.section == 1) {
if ([tableView numberOfRowsInSection:1] == _entrees.count) {
Items *thisEntree = [_entrees objectAtIndex:indexPath.row];
cell.textLabel.text = thisEntree.title;


}
else { cell.textLabel.text = @"No Data Avaiable";
}

}
}

有没有办法延迟“无数据”短语的出现,或者只在它为空或无法获取时显示它。

这是我的 NSURLConnection

- (void) loadDataUsingNSURLConnection {
NSString *url = @"http://ueat.site88.net/westTest.xml";
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSLog(@"response == %@", response);
}

感谢您提前提供的帮助。

干杯

最佳答案

考虑根据您的调用是否已完成加载数据,使“No Data Available”字符串动态化。如果调用尚未完成,请使用“正在加载”或类似的东西。如果调用已完成,请显示现有的“无可用数据”字符串。

用例子编辑:

使用现有代码,最简单的做法是将 _deli_entrees 变量设置为 nil,直到您加载它们,并在显示消息时检查该条件:

@interface YourViewController ()
{
NSArray *_deli;
NSArray *_entrees;
}
@end

在您的 viewDidLoad 中将数组设置为 nil

- (void)viewDidLoad
{
[super viewDidLoad];
_deli = nil;
_entrees = nil;
}

将您之前代码中的逻辑更改为:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
switch (section) {
case 0:
if (_deli == nil || _deli.count == 0) {
return 1;
}
else {
return _deli.count;
}
break;
case 1:
if (_entrees == nil || _entrees.count == 0) {
return 1;
}
else {
return _entrees.count;
}
break;
}

return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

}
//[UIColor colorWithRed:191.0f/255.0f green:48/255.0f blue:48/255.0f alpha:1.0]
cell.textLabel.textColor = [UIColor whiteColor];
cell.textLabel.font = [UIFont fontWithName:@"TimesNewRomanPS-BoldMT" size:17.0f];

if (indexPath.section == 0) {
if (_deli == nil)
cell.textLabel.text = @"Loading";
else if (_deli.count > 0) {
Items *thisDeli = [_deli objectAtIndex:indexPath.row];
cell.textLabel.text = thisDeli.title;
}
else
cell.textLabel.text = @"No Data Avaiable";
}
else if (indexPath.section == 1) {
if (_entrees == nil)
cell.textLabel.text = @"Loading";
else if (_entrees.count > 0) {
Items *thisEntree = [_entrees objectAtIndex:indexPath.row];
cell.textLabel.text = thisEntree.title;
}
else
cell.textLabel.text = @"No Data Avaiable";
}
}

由于您的 loadDataUsingNSURLConnection 只是写出响应,所以我不确定您是如何加载数组的,但此时您应该明白了。您需要做的只是将响应加载到数组中,然后调用表上的 reloadData 方法以显示新数据。

关于ios - UITableView 在有数据之前没有弹出数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23749208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com