带有标签的自定义UITableViewCell和UISlider在ios 7中的6次崩溃中运行良好。 UITableViewCellScrollView?

时间:2013-10-01 14:08:14

标签: uitableview ios7 uislider

我打算将此作为一个问题发布但我已经解决了,并且认为我会分享它以防其他人遇到此问题。

我有一个名为SliderCell的自定义tableViewCell。我在桌子上使用了许多SliderCell。

SliderCell包含一个UISlider和一个UILabel。

当用户移动滑块时,标签会更新为新值

这是在这个方法

- (IBAction)possibilityDidChange:(UISlider *)sender {

现在,在这种情况下,发件人是UISlider控件

要设置UILabel的值,我需要获取发件人所在的tableviewCell(sliderCell)。'

最初我得到如下

SliderCell *theAnimalCell =(SliderCell*)sender.superview.superview;

然后我可以像这样设置标签

theAnimalCell.sliderLabel.text = [NSString stringWithFormat:@"turtles %@",possibilityString];

当我使用Xcode 4.x并定位iOS6.1

时,一切顺利

现在,在决定200米+不能出错之后,我只是针对iOS 7而且我突然碰到了碰到我的任何一个UISliders时发生了撞击

我收到此错误

[UITableViewCellScrollView currentSlider]:无法识别的选择器发送到实例

我在文档中找不到对此类的任何引用。

3 个答案:

答案 0 :(得分:6)

检查类我发现了我期望成为SLiderCell的东西实际上现在是一个UITableViewCellScrollView。 但是,如果你通过添加一个额外的.superview上升到另一个级别,你就可以进入自定义UITableViewCell并且它现在可以再次运行

所以改变来自

SliderCell *theAnimalCell =(SliderCell*)sender.superview.superview;

到此

SliderCell *theAnimalCell =(SliderCell*)sender.superview.superview.superview;

我想如果你想支持iOS 7和iOS 6,你需要在尝试抓住自定义单元格之前进行检查。

嗯,就是这样,希望这证明对那里的人有用。

西蒙

答案 1 :(得分:2)

制造这样的条件。

AddTOcartCell *cell = ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) ? (AddTOcartCell*)textField.superview.superview.superview : (AddTOcartCell*)textField.superview.superview;
cell.btnUpdate.hidden=FALSE;
NSLog(@"Call Y%f",cell.frame.origin.y);
[tblProduct setContentOffset:CGPointMake(0,cell.frame.origin.y) animated:YES];

答案 2 :(得分:1)

ios 7 中的原因是它从此返回UITableViewCellContentView: -

settingCustomCell *theAnimalCell =(settingCustomCell*)[[sender superview]superview];

所以要在 ios 7 中获取UITableViewCell,只需将代码更改为: -

settingCustomCell *theAnimalCell =(settingCustomCell*)[[sender superview]superview]superview];

注意: - 但要忽略任何冲突,请根据ios条件设置这两个条件。