NSButton有两个功能

时间:2011-09-11 15:06:40

标签: cocoa methods nsbutton

我有一个NSButton,它上传文件并解析响应。 我想实现以下内容: 当我点击按钮时,他上传文件并解析响应。当发生这种情况时,按钮标题应该从“上传”更改为“取消”,当我在上传或解析解析或上传过程时再次按下按钮时应该停止。 当进程被取消或成功时,按钮标题应该返回“上传”,如果我现在点击按钮,他应该从上传和解析开始。 我希望你能想象我的意思,英语不是我的母语;)

提前致谢

4 个答案:

答案 0 :(得分:1)

您可以执行此操作。

- (IBAction)btnAction:(id)sender {

     NSButton *btn=(NSButton *)sender;

    [btn setTitle:([btn.title isEqualToString:@"Upload"] ? @"Cancel" : @"Upload")];

    if([btn.title isEqualToString:@"Upload"]){
        //Do upload and parsing
    }else{
        //Cancel upload and parsing
    }
}

答案 1 :(得分:0)

所有控件都有目标和操作。目标通常是一些控制器对象。当您调用目标的操作时(例如-multiPurposeButtonClicked:),您可以更改控制器的某些内部状态(可能是名为needsUpload的BOOL)并设置发件人(按钮)的标题或执行其他一些活动在这个状态。该方法可能会根据[self beginProcessingUpload]调用[self cancelTheWholeThing]needsUpload == YES。当您的“上传完成”回调发生时,您可以重置控制器的状态并使用按钮的插座(可能是IBOutlet NSButton * uploadButton;)来重置标题。

这取决于你如何处理这个问题。更具体的问题将得到更有针对性的答案。

答案 2 :(得分:0)

要执行此操作,您必须在首次按下按钮时创建一个新线程,上传并解析响应事物,然后更改按钮的标题,如果再次按下该按钮,则销毁该线程并恢复按钮的标题后面,确保线程完成后,还原按钮的状态。


**要确定按钮单击应采取什么操作,只需测试线程的句柄以查看它是否为零,如果是,则创建一个新线程,否则终止并设置为nil。 (不要忘记开始时设置为nil。)

答案 3 :(得分:0)

您可以将NSButton的操作重新分配给备用选择器。假设您有两个选择器:upload:(id)sendercancel:(id)sender

最初设置NIB以调用upload:选择器。在upload:选择器中,您可以使用插座(如Joshua所提到的)更改按钮的标题以取消,然后更改操作:

- (IBAction)upload:(id)sender {
    [uploadButton setTitle:@"Cancel"];
    SEL cancelSelector = @selector(cancel:);
    [uploadButton setAction:cancelSelector];

    // Carry out upload actions
}

cancel:选择器中,您可以按原样设置它们:

- (IBAction)cancel:(id)sender {
    [uploadButton setTitle:@"Upload"];
    SEL uploadSelector = @selector(upload:);
    [uploadButton setAction:uploadSelector];

    // Carry out cancel actions
}

当然,您必须添加额外的处理以考虑在上传完成后设置上传按钮。