2012-04-18 11 views
7

Düğmeyi tıklattığınızda görünüm tabanlı bir tabloda bir düğme için satırı nasıl alırsınız? Düğme tıklandığında satır seçilmez, ancak düğmenin eylem yönteminde sender.superview.superview günlüğünü günlüğe kaydederseniz, şunu bulurum: NSTableRowView: 0x1001b3a90 - row: 2. Yani, satırda günlüğü var, ama programa nasıl ulaşacağımı bilmiyorum. Düğmenin eylem yöntemini NSTableCellView alt sınıfında kullanıyorum.Düğme satırını görünüm tabanlı tabloya getir

cevap

8

-[NSTableView rowForView:] belgelerinde bu diyor ki:

Bu tipik bir NSButton (veya NSControl) için eylem yönteminde gerekli olan eylem üzerinde yapılmalıdır neyi satır (ve sütun) öğrenmek için.

+0

Teşekkür Bu kodu paylaşır. Tablo görünümünü sender.superview.superview.superview öğesinden düğmenin eylem yönteminden ve sender.superview – rdelmar

+0

görünümünden alabilirim. Eylem bir denetleyiciye gönderilmeli ve bu denetleyici tablo görünümünü bilmelidir. Bir çıkışı olmalı. Yani, süper görüntü zincirini takip etmemesi gerek. Ve, “göndereni”, “-rowForView:” argümanı olarak iletebilirsiniz, çünkü bu, doğrudan veya dolaylı olarak görünümü içeren satırı arar. –

+0

Görünüm tabanlı bir tabloda çeşitli UI öğelerini nasıl manipüle edebileceğimi görmek için bazı testler yapıyordum, bu nedenle başlangıçta, uygulama temsilcisinde (basitlik için) eylem yöntemine sahiptim ve hiç çağrılmadı. Sonra özel tablo hücresi görünümünde koydum çünkü bir yerde olması gereken yerde okudum. Yorumunuzda söylediğin gibi, gerçekten bir kontrolör nesnesinde olması gerektiği görünüyor, ancak çalışmasını sağlamak için nereye gidebileceği konusunda bazı kısıtlamalar var mı? Uygulama delegesinde neden çalışmadı? Yanıtlayıcı zincirin görünüm tabanlı bir tablo için neye benzediğinden emin değilim. – rdelmar

1

Size basit bir örnek veriyorum. Bunun içinde içerik görünümünde bir UIButton ekliyorum. Ben butonuna tıklandığında bunun ne

-(void)goBuyTab:(UIButton *)sender{ 
    NSLog(@"after click buy button function called goBuyTab"); 
    NSLog(@"sender.tag in goBuyTab : %d",sender.tag); 
    int selectedRow=sender.tag;// This is row number 
} 

Umut ben

//Adding a button 
    UIButton *btnBuyer=[UIButton buttonWithType:UIButtonTypeCustom]; 
    btnBuyer.frame=CGRectMake(238, 10, 26, 32); 
    btnBuyer.tag=indexPath.row; 
    [btnBuyer setImage:[UIImage imageNamed:@"buyIcon.png"] forState:UIControlStateNormal]; 
    [btnBuyer addTarget:self action:@selector(goBuyTab:)forControlEvents:UIControlEventTouchUpInside]; 
    [cellNew.contentView addSubview:btnBuyer]; 

gerekli Ve Kullanıcı bu tıkladığında aşağıdaki yönteminden kimliği var ben Satır numarası almak ve çağrı orada Yöntem arayıp ne istedin

-1

osx size kumanda içinde düğme hücre eylem yönteminde bu kullanabilirsiniz:

- (IBAction)yourMethod:(NSButtonCell *)sender { 

NSInteger selected = [yourTableView selectedRow]; 
NSLog(@"sender sends :%ld", selected); 
} 

Eğer NSTableView Kontrölörden bir çıkış ayarlamanız gerekir.

+0

Bu, her zaman işe yaramıyor çünkü altta yatan satırı seçmeden satırdaki bir düğmeyi tıklamanız mümkün. – Ely

+0

Ayrıca nedeniyle (hücre bazlı bir tablo görünümünde) çalışmıyor 'sender'' NSTableView' değil, 'NSButtonCell' olup. –

0

bu ihtiyacım olan şey, Swift 4.

için
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { 
    ........ 
    but.action = #selector(ViewController.buttonAction) 
    ......... 
} 

@objc func buttonAction(but: NSButton){ 
    let tablerow: NSTableRowView = but.superview?.superview as! NSTableRowView; 
    let index = table?.row(for: tablerow); 
    print("\(index)); 
} 
İlgili konular