【问题标题】:Segmented Control not affecting if loop in -(IBaction) method分段控制不影响 -(IBaction) 方法中的 if 循环
【发布时间】:2012-12-12 18:15:35
【问题描述】:

我正在制作一个 IOS 应用程序,它可以在按下 UIButton 时播放 wav 文件。我正在尝试实现 UISegmentedcontrol,以便在突出显示不同的片段时更改正在播放的样本。

这是我的 viewController.h 代码:

@property (nonatomic, retain) IBOutlet UISegmentedControl *segmentedControl;
-(IBAction)playFile1;
-(IBAction)playFile2;
-(IBAction)playFile3;
@end

和 viewController.m

@synthesize segmentedControl = segmentedControl;
-(IBAction)playFile1{
    if([segmentedControl selectedSegmentIndex] == 0){
    [rtcmixmanager playFile1];
    }
    else if([segmentedControl selectedSegmentIndex] == 1){
    [rtcmixManager playFile2];
    }
    else{
    [rtcmixManager playFile3];
    }
}

我已经尝试了这两种方法,并在 -(IBaction) 方法本身下的 RTCMixManager.m 文件中添加了类似的 if 语句,但没有运气。 该项目将编译,但似乎只播放文件 1,无论突出显示哪个段。有谁知道这是为什么?

【问题讨论】:

  • 我的猜测是您将操作连接到分段控件的错误事件。您是否已将其与“Value Changed”事件相关联?
  • 我不确定如何连接活动?我对目标 c 有点陌生,据我了解,我可以使用分段索引选择的条件语句,而无需来自视图控制器的任何连接。
  • 看看我编辑的答案。您的条件语句很好,但您需要将插座(在您的情况下为分段控件)连接到操作(IBAction)。

标签: objective-c uibutton uisegmentedcontrol ibaction


【解决方案1】:

试试这个:

-(IBAction)segmentChanged:(id)sender{
    UISegmentedControl *segControl = ((UISegmentedControl *)sender);
    if([segControl selectedSegmentIndex] == 0){
        [rtcmixmanager playFile1];
    }else if([segControl selectedSegmentIndex] == 1){
        [rtcmixManager playFile2];
    }else{
        [rtcmixManager playFile3];
    }
}

并将其连接到.xib文件中Segmented Control事件的“值改变”

编辑: 你也可以用这样的代码来做:

[segmentedControl addTarget:self action:@selector(segmentChanged:) forControlEvents:UIControlEventValueChanged];

【讨论】:

  • 我试过了,我确保添加 -(IBAction)segmentedChanged;也连接到.h文件,并将我视图的Value Changed连接到文件所有者的segmentedChanged值。现在当我运行应用程序时,当我尝试按下按钮时它会自行关闭,当我尝试时它也会自行关闭按任意分段按钮。
  • 那么,你应该在调试控制台中查看你得到的异常。
  • 如果我按下按钮'2012-12-12 - [RTAudioFileViewController playFile1],我会在调试窗口中得到这个:无法识别的选择器发送到实例0x593bbb0 RTAudioFile [533:207] ***终止应用程序到期未捕获的异常'NSInvalidArgumentException',原因:'-[RTAudioFileViewController playFile1]:无法识别的选择器发送到实例 0x593bbb0'' 如果我按下分段控件:'RTAudioFile[546:207] -[RTAudioFileViewController segmentedChanged]:无法识别的选择器发送到实例 0x4e3ad10'
  • 那么,您的细分现在可以正常工作了。您向 (rtcmixManager) 发送消息的对象无法识别选择器。确保该对象的类的接口文件(即.h文件)中有方法,并在.m文件中实现。您应该接受我的回答,因为分段控制问题现已解决。祝你好运。
  • 方法是“segmentChanged:”而不是“segmentedChanged”
猜你喜欢
  • 1970-01-01
  • 2016-02-14
  • 2013-10-07
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 2017-09-28
相关资源
最近更新 更多