我正在开发一个加密工具,我有一个文件选择器,用户可以进入该选择器来选择要加密的文件。我的问题相当容易。用户单击文件选择器中的"选择"按钮后,文件名必须返回到应用程序上的标签中。问题是,我无法进入包含选择按钮的窗口来连接到IBAction。用户单击"选择"后,如何将文件名返回到该标签?也许有人能上传这样做的代码吗?我现在有点傻,所以请简单地谈谈。。。将非常感谢循序渐进的指导
非常感谢
以下是文件选择器的代码:
- (IBAction)fileChooser:(id)sender {
int i;
NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setCanChooseDirectories:YES];
[openDlg setPrompt:@"Select"];
if ([openDlg runModalForDirectory:nil file:nil] == NSOKButton )
{
NSArray* files = [openDlg filenames];
for( i = 0; i < [files count]; i++ )
{
[files objectAtIndex:i];
}
}
}
"将文件名返回到该标签"没有意义。函数或方法只向调用它的函数或方法返回值;这是"return"在C和Objective-C中唯一的含义。此外,当函数或方法返回时,将结束。它不再运行。它将程序的控制返回给调用它的函数或方法。
因此,从循环中返回值在这里没有意义(该方法只处理第一个文件名),而将值返回"到[对象]"也没有意义。
您需要在实现fileChooser:
的类中为字段(标签是NSTextField的一种)创建一个出口,并在nib编辑器中挂接该出口。然后,您可以使用该出口告诉字段设置其stringValue
。
(重要提示:与Cocoa Touch不同,大多数AppKit类不使用正式属性。您必须向字段发送setStringValue:
消息。)
《Cocoa Fundamentals Guide》涵盖了出口,您可以在AppKit框架参考中找到NSTextField文档。
还有一件事:由于用户选择多个文件是可能的,而且非常合理,因此您应该处理这种情况。只需依次将文本字段的字符串值设置为每个文件名,它将只显示数组中的最后一个文件名——与将其设置为第一个文件名并返回没有太大区别。一旦文本字段工作正常,就应该将其替换为表视图。
另一方面,如果您不想支持多个文件,那么(1)为什么?以及(2)考虑将打开面板设置为不允许多选。(请参阅我对上一个问题的回答,以获取该方向的文档参考。)然后,您可以假设,当响应为"OK"时,文件名数组只包含一个项目,并完全截断循环。