【问题标题】:Value from UISlider method?UISlider 方法的值?
【发布时间】:2010-06-09 18:40:32
【问题描述】:

谁能指出我关于滑块的正确方向,下面的版本是我的第一次尝试(范围是 0.0 - 100.0)我得到的结果不正确。

// Version 1.0
-(IBAction)sliderMoved:(id)sender {
    NSLog(@"SliderValue ... %d",(int)[sender value]);
}

// OUTPUT:
// [1845:207] SliderMoved ... -1.991753
// [1845:207] SliderMoved ... 0.000000
// [1845:207] SliderMoved ... 0.000000
// [1845:207] SliderMoved ... 32768.000435

使用下面的版本,我得到了我期望的值,我在 version_001 中缺少什么?

// Version 2.0
-(IBAction)sliderMoved:(UISlider *)sender {
    NSLog(@"SliderValue ... %d",(int)[sender value]);
}

// OUTPUT:
// [1914:207] SliderMoved ... 1
// [1914:207] SliderMoved ... 2
// [1914:207] SliderMoved ... 3
// [1914:207] SliderMoved ... 4

EDIT_001:

添加UISlider *slider = (UISlider *)sender; 如物质 G 所指出的确实有效。我知道使用 sender 是惯例,但在我看来,在这种情况下,不仅惯例不太清楚,而且代码也更复杂和更多。在 2.0 版中,将方法静态键入到 (UISlider *) 似乎是明智的 IMO。在滑块 IBAction 方法中是否存在使用 (UISlider *) 不起作用的情况?

干杯加里

【问题讨论】:

    标签: iphone objective-c cocoa-touch


    【解决方案1】:

    试试:

    -(IBAction)sliderMoved:(id)sender {
        UISlider *slider = (UISlider *)sender;
        NSLog(@"SliderValue ... %d",(int)[slider value]);
    }
    

    【讨论】:

    • 这确实有效,谢谢。正如我在上面所说的,我知道使用 (id)sender 是惯例,但似乎将方法静态键入 (UISlider *) 会更简单,也更容易遵循,除非有其他理由使用 (id)sender。这似乎是一种约定对我们不利的情况,一种约定俗成的约定?
    【解决方案2】:

    IMO 似乎很明智 静态类型的方法 (UISlider *) 与 2.0 版一样。是 有一种情况我可以忽略 使用的滑块 IBAction 方法 (UISlider *) 不起作用?

    Objective-C 运行时严重依赖命名约定来在运行时查找方法。你可能会多次使用非标准的方法名称,然后它就会咬你一口。最好不要碰运气。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多