2

デフォルトの行を選択するための私のBrowser実装では、次のコードを使用しました。

[browser setTarget:self];
[browser setAction:@selector(singleClickOnBrowser:)];
[browser sendActionOn:NSLeftMouseDown];
[browser selectRow:0 inColumn:0];
[browser sendAction];

ユーザーのクリックと、最初に選択された行を区別してデフォルトの行を選択する方法はありますか?

4

3 に答える 3

5

私のアプリでは、NSBrowserで最後に選択されたアイテムを追跡する必要があります。以下はNSBrowserを設定します。

- (void)awakeFromNib
{
    [browser setDelegate:self];
    [browser setTarget:self];
    [browser setAction:@selector(browserCellSelected:)];
    [browser setSendsActionOnArrowKeys:YES];
}

以下は、セルが選択されるときにセルを処理します。これは、マウスまたはキーボードによる選択で機能します。アプリで複数の選択が許可されている場合は、アクションメソッドでそれを処理する必要があります。

- (void)browserCellSelected:(id)sender
{
    NSIndexPath *indexPath = [browser selectionIndexPath];
    MyItem *myItem = [browser itemAtIndexPath:indexPath];
    if (myItem)
    {
        NSLog(@"Selected Item: %@", myItem.name);
    }
}

ところで、プログラムによる選択はbrowserCellSelected:メソッドを起動せず、ユーザーのクリックはデリゲートのbrowser:selectRow:inColumn:メソッドを呼び出しません。

于 2013-02-16T02:13:22.777 に答える
0

ユーザーのクリックとコードからの行と列の選択を区別するAPIが見つかりませんでした。これを実現するために、ユーザーのクリックを追跡するBOOL変数を宣言しました。

コードに続いて、コードのBOOL変数を変更しました。

self.userClickedOnRow = NO;
        [self.browser selectRow:0 inColumn:0];
    [self.browser sendAction];
        self.userClickedOnRow = YES;

次のデリゲートを実装しました

 - (void)browser:(NSBrowser *)browser didChangeLastColumn:(NSInteger)oldLastColumn toColumn:(NSInteger)column
    {

        if(!self.userClickedOnRow)
        {
            NSLog(@"Programatic selection");
        }
        if (self.userClickedOnRow)  
        {
            self.userClickedOnRow = NO;
            // User Clicked on the browser,Do the required actions and set the variable again.
            self.userClickedOnRow = YES;

}
}
于 2012-08-17T12:02:37.293 に答える
0

NSBrowser をサブクラス化し、doClick をオーバーライドできます。ドキュメンテーションによると、doClick はマウス クリック イベントのハンドラーですが、現時点では、キーボードの矢印を使用して行が変更されたときにも呼び出されます。以下は私のために働いた:

@implementation MyBrowser

...

- (void)doClick:(id)sender {
    [super doClick:sender];

    //
    // Here you can add any handler AFTER the selection has changed
    //
}

...

@end
于 2015-08-20T12:43:37.273 に答える