0

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

提前致谢

4

4 回答 4

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
    }
}
于 2012-10-11T12:21:36.367 回答
0

所有控件都有一个目标和一个动作。目标通常是一些控制器对象。当你的目标的动作被调用时(比如-multiPurposeButtonClicked:),你可以改变你的控制器的一些内部状态(可能是一个叫做 BOOL 的needsUpload)并设置发送者的(按钮的)标题或者基于这个状态执行一些其他的活动。该方法可能会调用[self beginProcessingUpload][self cancelTheWholeThing]基于是否needsUpload == YES. 当您的“上传完成”回调发生时,您可以重置控制器的状态并使用按钮的插座(也许IBOutlet NSButton * uploadButton;)来重置标题。

如何处理这个问题真的取决于你。更具体的问题将得到更集中的答案。

于 2011-09-11T15:22:17.657 回答
0

为此,您必须在第一次按下按钮时创建一个新线程来上传和解析响应内容,然后更改按钮的标题,如果再次按下按钮,则销毁线程并恢复按钮的标题回来,还要确保,一旦线程完成,恢复按钮的状态。


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

于 2011-09-11T15:22:49.723 回答
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
}

您当然必须添加额外的处理才能考虑在上传完成后将“上传”按钮重新设置。

于 2011-09-11T16:41:35.893 回答