我在群组(分段)模式下有UITableView
。该表的每个部分包含大约5个单元格。
表格的每个单元格由一个UILabel
和一个UICollectionView
组成。 UICollectionView
将包含一组带水平滚动的简单项目。
所以,我有类似Grid View的东西,它在Storyboard中看起来像:
在模拟器中,它看起来像是:
我无法理解的问题:
当我水平滚动任何行时 - 另一行(可能在同一个或另一个部分中)可以与第一行同步滚动,看起来它们彼此有某种联系或它是同样的UICollectionView
!
如何在每个UICollectionView
中使用不同的UITableViewCell
或打破"奇怪的连接"?
我的代码(标题):
@interface ipAthleteHistoryTableViewController : UIViewController <UICollectionViewDataSource, UITableViewDataSource, UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITextField *datesRangeFromPeer;
@property (weak, nonatomic) IBOutlet UITextField *datesRangeToPeer;
@property (weak, nonatomic) IBOutlet UITableView *history;
- (IBAction)datesRangeFromPeerEditingExited:(id)sender;
- (IBAction)datesRangeFromPeerSet:(id)sender;
- (IBAction)datesRangeToPeerEditingExited:(id)sender;
- (IBAction)datesRangeToPeerSet:(id)sender;
- (IBAction)todaySpeedButtonPressed:(id)sender;
- (IBAction)weekSpeedButtonPressed:(id)sender;
- (IBAction)monthSpeedButtonPressed:(id)sender;
- (IBAction)quarterSpeedButtonPressed:(id)sender;
@end
实施
- (void)viewDidLoad
{
_dumbNumberOfItems = 24;
_dumbNumberOfItems2 = 5;
[super viewDidLoad];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _dumbNumberOfItems2;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return _dumbNumberOfItems;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 5;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return [NSString stringWithFormat:@"12.09.2014:%ld", (long)section];
}
- (UITableView *)findParentTableView:(UITableViewCell *)tableCellView
{
return (UITableView *)[ipNavigationHelper findParentViewOfClass:[UITableView class]
ofChildView:tableCellView];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
ipAthleteHistoryTableCell *cell = [tableView dequeueReusableCellWithIdentifier:athleteHistoryChart_ExcerciseTrialsCell forIndexPath:indexPath];
[[cell excerciseTitle] setText:[NSString stringWithFormat:@"Title %li:%li; %ld", [indexPath section], (long)[indexPath row], (long)[cell excerciseTrials]]];
[[cell excerciseTrials] reloadData];
return cell;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
ipAthleteHistoryExcerciseTrialCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:athleteHistoryChart_TrialCell
forIndexPath:indexPath];
ipAthleteHistoryTableCell *upCell = [self findParentTableCell:collectionView];
[[cell actualTrial] setText:[ipNumeralsConverter convertToLatinArabNumber:[indexPath row]]];
[[cell actualRepeats] setText:[NSString stringWithFormat:@"%li", [[[self findParentTableView:upCell] indexPathForCell:upCell] section]]];
[[cell targetRepeats] setText:[NSString stringWithFormat:@"%li", [[[self findParentTableView:upCell] indexPathForCell:upCell] row]]];
[[cell workWeight] setText:[NSString stringWithFormat:@"%li", [indexPath row]*10]];
return cell;
}
所有初始工作(如ID注册,单元格原型设计等)都是使用Storyboard完成的。
答案 0 :(得分:0)
您的问题可能与UITableViewCells重用的事实有关。因此,当您滚动并查看新单元格时,它实际上只是其中一个单元格消失了。要处理您的问题,您需要确保在cellForRowAtIndexPath中正确初始化单元格,并确保覆盖之前的任何数据。
答案 1 :(得分:-1)
好的,最后我决定通过创建独特的Cell ID并在其中创建它来逃离重复使用功能的单元格#34;飞行中&#34;没有Storyboard原型。它看起来很好。
代码是标准的:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellId = [NSString stringWithFormat:@"%@-%ld-%ld",
athleteHistoryTable_ExcerciseTrialsCell,
(long)[indexPath section],
(long)[indexPath row]];
ipAthleteHistoryTableCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil)
{
cell = [[ipAthleteHistoryTableCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:cellId];
[[cell excerciseTrials] registerClass:[ipAthleteHistoryExcerciseTrialCell class]
forCellWithReuseIdentifier:athleteHistoryTable_TrialCell];
[[cell excerciseTrials] setDataSource:self];
}
[[cell excerciseTitle] setText:[NSString stringWithFormat:@"Excercise Title %li:%li; %ld",
[indexPath section],
(long)[indexPath row],
(long)[cell excerciseTrials]]];
[[cell excerciseTrials] reloadData];
return cell;
}