【问题标题】:how to get information from custom sheet in OSX如何从 OSX 中的自定义工作表中获取信息
【发布时间】:2012-11-12 22:28:09
【问题描述】:

我创建了一个自定义工作表,其中包含一个表格。该表中包含用户名列表:

我想获取选定的行值并在应用程序中使用它。我可以通过以下方式获取该行:

-(void)tableViewSelectionDidChange:(NSNotification *)notification{
    NSInteger selectedRow = [[notification object] selectedRow];
    if(selectedRow != -1){
        self.selectedRowDict = [self.usersArray objectAtIndex:selectedRow];
    }
}

但现在我的问题是我想将数据传递回启动此工作表的主窗口。

以下是相同的代码:

if(!self.accountSheet){
    [NSBundle loadNibNamed:@"AccountSheet" owner:self];
}
[NSApp beginSheet:self.accountSheet
   modalForWindow:[mainWindowView window]
    modalDelegate:self
   didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
      contextInfo:NULL];

如何做到这一点?

请注意:工作表是在与主窗口 nib 不同的 nib 中创建的。每个 nib 都有自己的 NSObject 扩展类来实现动作和其他与窗口相关的工作。 工作表笔尖作为文件所有者与主窗口相关,并且在主笔尖 NSObject 类中有一个 IBOutlet

如果需要更多信息,请告诉我。

【问题讨论】:

    标签: macos cocoa customization cocoa-sheet


    【解决方案1】:

    让您的工作表将信息存储在一个实例变量中,就像您正在做的那样,然后在您的 didEndSelector 中,只需从工作表中获取值:self.accountSheet.selectedRowDict 或 what-have-you。

    【讨论】:

    • 我试过了,但编译器说在对象类型 NSWindow 上找不到 selectedRowDict。并且让我理解......这是有道理的,因为这个变量是在一个单独的 NSObject 类中声明的,该类与表委托和工作表相关联。我在问题中添加了更多信息.. 有助于解决问题
    • 用你的 NSWindow 子类的类型而不是 NSWindow 声明 accountSheet。这应该满足编译器。
    • 我仍然没有得到您的方法.. 抱歉...您能否详细说明“使用您的 NSWindow 子类而不是 NSWindow 的类型声明 accountSheet”的意思。因为我有一个用于工作表的笔尖和一个扩展 NSObject 的对象类
    • 我错了——我认为你的 tableview 委托是一个窗口子类。哪个类实现了-tableViewSelectionDidChange?那是你的扩展 NSObject 的控制器类吗?
    • 是的......代码是这样的 - @interface Account_Sheet : NSObject
    猜你喜欢
    • 2014-12-07
    • 2018-01-28
    • 2014-01-06
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    相关资源
    最近更新 更多