在我的应用程序中,我在表格视图中添加一个滑块,即每行包含一个滑块&它也可以正常工作。
但是当我滚动表格视图时,滑块会重新加载,即每个都显示我的起始位置而不是滑块值。
//My code is as follow for slider in table cell:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier=[NSString stringWithFormat:@"CellIdentifier%d",indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
return cell;
}
UISlider* theSlider = [[[UISlider alloc] initWithFrame:CGRectMake(174,12,120,23)] autorelease];
theSlider.maximumValue=99;
theSlider.minimumValue=0;
[cell addSubview:theSlider];
return cell;
}
我该如何解决这个问题?
答案 0 :(得分:2)
您必须将滑块值存储在数组等中,并根据cellforrowatindexpath
答案 1 :(得分:0)
你可以这样做,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *CellIdentifier =[NSString stringWithFormat:@"Cell%d",indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
UISlider* theSlider = [[[UISlider alloc] initWithFrame:CGRectMake(174,12,120,23)] autorelease];
theSlider.maximumValue=99;
theSlider.minimumValue=0;
[cell addSubview:theSlider];
}
return cell;
}
答案 2 :(得分:0)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier=[NSString stringWithFormat:@"CellIdentifier%d",indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UISlider* theSlider = nil;
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
theSlider = [[[UISlider alloc] initWithFrame:CGRectMake(174,12,120,23)] autorelease];
theSlider.maximumValue=99;
theSlider.tag =2;
theSlider.minimumValue=0;
[[cell contentView] addSubview:theSlider];
}
return cell;
}
答案 3 :(得分:0)
我需要更多代码才能获得更好的答案。如果这对您没有帮助,请发布您的整个
-tableView: cellForRowAtIndexPath:
方法
我现在的猜测是,每次使用
重复使用单元格时,都要设置一个新的Slider-tableView:dequeueReusableCellWithIdentifier:
(自然)每次都会在起始位置产生一个新的Slider。
您必须使用可以分配给正在重复使用的单元格的字典或滑块数组。
例如,如果TavbleView应该有20行,每行包含一个滑块,则需要一个包含20个滑块的数组,并执行类似
的操作cell.slider = [mySliderArray objectAtIndex:indexPath.row]
这样,滑块就会保留这个值。
编辑:试试这个:(我稍微修改了上面的代码)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier=[NSString stringWithFormat:@"CellIdentifier%d",indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
return cell;
}
//This is where you went wrong
//UISlider* theSlider = [[[UISlider alloc] initWithFrame:CGRectMake(174,12,120,23)] autorelease];
//theSlider.maximumValue=99;
//theSlider.minimumValue=0;
//[cell addSubview:theSlider];
//this is what you need to do:
[cell addSubview: [mySlidersArray objectAtIndex:indexPath.row]];
return cell;
}
显然,您需要在viewDidload或其他任何地方设置一个名为'mySlidersArray'的滑块数组。
下一页编辑: 以下是我将如何创建滑块阵列:
NSMutableArray *arrayOfSliders = [NSMutableArray arrayWithCapacity: 20];
for (int i =0; i<20; i++){
UISlider *slider = [[UISlider alloc] init];
//set the slider-properties here, like you already did in your code
[arrayOfSliders addObject: slider];
}
现在这些滑块可以在上面的代码中访问。
另一种方法是保留滑块的值数组,并在实例化之后将滑块设置为这些值。但这会导致性能非常差,因为将为屏幕上的每个单元格创建一个新的滑块。
如果您需要更多帮助,请告诉我 玩得开心