我有一个NSButton,它上传文件并解析响应。 我想实现以下内容: 当我点击按钮时,他上传文件并解析响应。当发生这种情况时,按钮标题应该从“上传”更改为“取消”,当我在上传或解析解析或上传过程时再次按下按钮时应该停止。 当进程被取消或成功时,按钮标题应该返回“上传”,如果我现在点击按钮,他应该从上传和解析开始。 我希望你能想象我的意思,英语不是我的母语;)
提前致谢
答案 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)sender
和cancel:(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
}
当然,您必须添加额外的处理以考虑在上传完成后设置上传按钮。