在我的地图应用程序中,我在主屏幕上有分段控制器并使用它我有Map View& tableview(都是UIView)。我已尝试过所有内容,但我的数据未加载到我的tableview中。这是我的tableview代码。这里的标记是我的xml文件中的属性,它包含Showroom名称,Iam能够解析它。 .h文件
@interface HViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> {
UITableView *_tableView;
}
@property (nonatomic, retain) IBOutlet UITableView *_tableView;
@end
.m文件
已编辑 =使用ViewWillAppear,viewDieLoad,分段操作方法
@synthesize tableView;
- (void)viewDidLoad {
appDelegate = (HAppDelegate *)[[UIApplication sharedApplication] delegate];
[segmentedControl addTarget:self action:@selector(segmentAction:)
forControlEvents:UIControlEventValueChanged];
}
- (void)viewWillAppear:(BOOL)animated
{
self._tableView.rowHeight = 80.0;
[_tableView reloadData];
}
-(void)segmentAction:(id)sender;{
UISegmentedControl* segCtl = sender ;
if( [segCtl selectedSegmentIndex] == 0 )
{
NSLog(@"segmentAction mapView");
mapView.hidden = NO;
_tableView.hidden = YES;
//[ self.view addSubview:mapView] ; // adding view to segmentindex 0
}
if( [segCtl selectedSegmentIndex] == 1 )
{
NSLog(@"segmentAction _tableview");
_tableView.hidden = NO;
mapView.hidden = YES;
//[ self.view addSubview:_tableview] ;
}
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"appDelegate.markers _tableview");
return [appDelegate.markers count];
}
//method to print row(showroom count on Header)
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection: (NSInteger)section {
if(section == 0)
return [NSString stringWithFormat:NSLocalizedString(@"ShowRooms[%d]", @"Showroom format"), [appDelegate.markers count]];
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath {
static NSUInteger const kShowroomNameLabelTag = 2;
UILabel *ShowroomNameLabel = nil;
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleGray;
ShowroomNameLabel = [[[UILabel alloc] initWithFrame:CGRectMake(50, 1, 300, 20)] autorelease];
ShowroomNameLabel.tag = kShowroomNameLabelTag;
ShowroomNameLabel.font = [UIFont boldSystemFontOfSize:18];
[cell.contentView addSubview:ShowroomNameLabel];
NSLog(@"UITableViewCell.markers _tableview");
}
else
{
ShowroomNameLabel = (UILabel *)[cell.contentView viewWithTag:kShowroomNameLabelTag];
}
marker *aMarker = [appDelegate.markers objectAtIndex:indexPath.row];
//ShowroomNameLabel.text = aMarker.name;
ShowroomNameLabel.text= [NSString stringWithFormat:@"ShowroomName= %@", aMarker.name];
return cell;
}
在我的tableview标题中,它正确显示数据计数但未显示数据。 我已将委托,数据源,_tableview连接到HViewController的fileOwner,我在其中放置了上面的代码。 Plz提出我错的地方。我正在解析XML文件并在控制台中获取数据,我可以在Map上显示它。但是我无法在tableview中加载数据。
答案 0 :(得分:0)
尝试将[_tableView reloadData]
移至viewWillAppear
。
UITableViewController重新加载viewWillAppear
中的表格视图数据,而不是viewDidLoad
。我不能告诉你这会产生什么影响的确切原因,尽管我可以想到几个。无论如何,值得一试。
编辑:
对评论的回应
如果正在调用titleForHeaderInSection:
,则会有一个连接到表视图的数据源。因此,问题不在于缺少数据源连接。
我猜您的.xib文件中有2个表视图:一个大的&amp;它下面有一个短的。大表视图未连接到数据源,因此它只显示空行。短表视图 连接到数据源。但是,它对于标题来说足够高,并且没有剩余空间来显示任何单元格。因此,titleForHeaderInSection:
被调用,但cellForRowAtIndexPath:
不是因为没有空间来显示任何单元格
请注意,这只是一个猜测,但它是我能想到的唯一会导致您描述的行为的情况。你发布的代码看起来还不错,虽然比必要的要复杂一些。
毫无疑问reloadData
应该在viewWillAppear
中。这就是Apple工程师在创建UITableViewController类时所说的。所以,把它放在其他地方,你必须相信你比他们更了解。