在我的应用程序中我有两个TableViewControllers,首先我用随机按钮随机选择了几行并将他们的indexPath.row
保存在一个单独的MutableArray
中然后我尝试了只访问第二个TableViewController中的那些选定行,我使用了以下代码,
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return rArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
Radio * RadioObject;
RadioObject = [rArray objectAtIndex:indexPath.row];
if([rFavorites containsObject:[NSNumber numberWithInt:(int)indexPath.row]])
cell.textLabel.text = RadioObject.radioTitle;
else
cell.frame = CGRectZero;
return cell;
}
它给了我跟随结果。当从第一个TableViewController
&将结果存储在MutableArray
这里是NSLog
结果
Favorite Radios array is (
10,
8,
9
)
现在在模拟器中
] 1
我愿意做的是从这个TableViewController中删除其他空单元格。所以请建议我如何实现这一目标?
答案 0 :(得分:2)
如果要从tableview中删除所有其他行[仅显示选定的行]:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return rFavorites.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
Radio * RadioObject;
NSInteger index_rArray = [[NSString stringWithFormat:@"%@",[rFavorites objectAtIndex:indexPath.row]] integerValue];
RadioObject = [rArray objectAtIndex:index_rArray];
cell.textLabel.text = RadioObject.radioTitle;
return cell;
}
如果您希望保留所有行,则隐藏/压缩;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath;
{
if([rFavorites containsObject:[NSNumber numberWithInt:(int)indexPath.row]]){
return 50; // whatever your cell size is
}
else {
return 0;
}
}
答案 1 :(得分:0)
试试这一个代码。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return rFavorites.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
Radio * RadioObject;
RadioObject = [rArray objectAtIndex:[rFavorites[indexPath.row]]];
cell.textLabel.text = RadioObject.radioTitle;
return cell;
}
答案 2 :(得分:0)
实际上你正在做的是错误的,你应该为喜欢的东西创建一个新的数组,因为稍后第一个数组会得到更新,因为你只是将引用作为行号,第二个引用数组是没用的。
要回答您的问题,请在没有参考编号时将行高设置为0 ...
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
if (don't have reference) return 0;
return your_default_height
}
答案 3 :(得分:0)
你有没有尝试过根本不添加它们? :)
也许你可以在切换表时切换源数组,所以当在重新加载时调用numberOfRows时,tableView将使用正确的数组重新加载,并显示正确数量的单元格。
然后你不需要像设置cell.frame到CGZero一样破解。虽然如果你将heightForRow设置为UITableViewAutomaticDimension,那hack可能会有用。