2

以前に NSTableView を数回使用したことがあり、このメソッドを問題なく使用しましたが、何らかの理由で最新のプログラムでは、tableViewSelectionDidChange:行を切り替えるときにデリゲート メソッドが呼び出されません。これのソースを取得しようとする非常に単純なプログラムを作成しましたが、何らかの理由でまだ機能していません。おそらく何か小さなものを見落としていることはわかっていますが、これを何時間もじっと見つめていて、それが機能する他のコードと比較していて、何も見えません。

AppDelegate.h:

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate, NSTableViewDataSource, NSTableViewDelegate>

//not sure if the NSTableViewDelegate part is needed, as I've used this before without it

@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSTableView *tableView;

@end

AppDelegate.m:

#import "AppDelegate.h"

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
}
- (void)tableViewSelectionDidChange:(NSNotification *)aNotification{
    NSLog(@"Row changed");
}

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
{
    return 2;
}

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
    return nil;
}

@end
4

4 に答える 4

4

さらに、次の行を挿入して、何が起こるかを確認してください。AppDelegate をソースおよびデリゲートとして設定していることを確認してください。

- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex {
    return YES;
}

それでダメなら原因がわかりません。

于 2013-06-04T07:31:01.797 に答える
2

テーブルビュー コントロールをコントロール クリックし、文字列を AppDelegate の青いアイコンに拡張することによって、そのデータ ソースとデリゲートを AppDelegate に設定する必要があります (まだ行っていない場合)。

于 2013-06-03T03:57:52.007 に答える
0

NSViewControllerテーブルビューをなどでラップし、テーブルビューの と を に設定する必要がありyourControllerます。delegatedataSourceyourController

self.tableView.delegate = self;
self.tableView.dataSource = self;

もちろん、デリゲート メソッドとデータソース メソッドを に実装する必要がありますyourController

それで:

window.contentViewController = yourController;

これは私にとってはうまくいきます。

于 2018-04-16T09:25:25.467 に答える