当前位置:  开发笔记 > 前端 > 正文

双击Cocoa中的NSTableView行?

如何解决《双击Cocoa中的NSTableView行?》经验,为你挑选了5个好方法。

当用户双击一行中的一行时,我需要我的应用程序打开一个窗口NSTableView.我在寻找有关如何实现这一目标的信息或示例时遇到了一些困难.任何人都能指出我正确的方向吗?



1> Jim Puls..:

看看-setDoubleAction:NSTableView 上的方法; 你可以将它设置为一个方法,就像普通的目标 - 动作系统一样,但是双击一下.

在那个动作方法中,-clickedRow将是有用的.


还记得用setTarget设置表视图的目标:傻但可以忽略
有没有办法通过IB连接?
@IvanVučica是的,你可以在IB中连接它.见[本回答](http://stackoverflow.com/a/33645158/77567).
@robmayoff 5年后\ o /

2> amateur bari..:

将更多基本信息添加到@JimPuls答案,以便其他新人可以获益.

    需要在接口中声明NSTableView的IBOutlet.我认为最好在表的委托中这样做.

    需要通过Interface Builder连接到表的IBOutlet.要在IB中执行Ctrl-Drag&Drop,从声明出口的类到表视图.释放鼠标时,弹出窗口应显示您在步骤1中声明的插座名称.选择那个.

    在@implementation部分的-awakeFromNib方法中,在步骤#1中声明的IBOutlet上调用-setTarget:和-setDoubleAction:并在步骤#2中连接.

这是我的表视图委托的摘录.我的代理也设置为数据源,这就是为什么你会看到与它相关的NSTableViewDelegate和NSTabeViewDataSource接口.

//界面摘录.

@interface MyTableViewDelegate : NSObject 
{
  // This iVar needs to be connected to the table view via the IB.
  IBOutlet NSTableView *tableOutlet;
}

@property (assign) IBOutlet NSTableView *tableOutlet;

- (void)doubleClick:(id)nid;

@end

//实施摘录.

@implementation MyTableViewDelegate

@synthesize tableOutlet = _tableOutlet;

- (void)awakeFromNib {
  [_tableOutlet setTarget:self];
  [_tableOutlet setDoubleAction:@selector(doubleClick:)];
}

- (void)doubleClick:(id)object {
  // This gets called after following steps 1-3.
  NSInteger rowNumber = [_tableOutlet clickedRow];
  // Do something...
}

希望这可以帮助.



3> GeoffCoope..:

正如PR Singh所说,你可以使用cocoa绑定,你也可以传递selectedObjects.

    在IB中选择表视图,然后在Bindings检查器中设置这两个绑定,如下所示:

    >Double Click Target
    
    bind to = Application delegate object (or file owner)
    model key path = self
    selector name = myMethod:
    
    >Double Click Argument
    
    bind to = array controller
    controller key = selectedObjects
    selector name = myMethod:
    

myMethod的实现方式

- (void)myMethod:(NSArray*)selectedObjects
{
    NSLog(@"%@", selectedObjects);
}

这也记录在这里:https: //developer.apple.com/library/mac/qa/qa1472/_index.html



4> 小智..:

如果有人寻找swift 2.0版本:这对我有用.看起来比Objective C代码容易得多.

@IBOutlet weak var searchResultTable: NSTableView!

override func viewDidLoad() {
    super.viewDidLoad()
    searchResultTable.doubleAction = "doubleClickOnResultRow"
}

func doubleClickOnResultRow()
{
    print("doubleClickOnResultRow \(searchResultTable.clickedRow)")
}



5> rob mayoff..:

您可以在Interface Builder中连接双击操作.按住Control键并单击表视图(确保获取表视图,而不是滚动视图或剪辑视图或表列)以获取其连接面板.在"已发送操作"部分中找到"doubleAction"项.将其连接到您选择的IBAction.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有