2009-05-30 18 views
8

Özel hücre ile tablo görünümü var. Tablo birçok bölüm ve rows.i hücresine özel bir düğme var. Şimdi bu düğmeye tıkladığımda bölüm numarasını ve satır numarasını almak istiyorum. Doğru olan int section = indexPath.section;bölüm numarası ve özel hücrelerdeki satır numarası düğmesini tıklayın?

satır numarasına erişmek için (:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

bölüm numarasına erişmek için: Eğer tableView bir hücreyi seçtiğinizde aşağıdaki yöntemi denir bu

cevap

26

Görünüm denetleyicinizde bir UIControl olay işleme yöntemi uygulamanız ve bu düğmelerin tümünü tüm düğmeleriniz olarak ayarlamanız gerekir.

[theCell.button addTarget: self 
        action: @selector(buttonPressed:withEvent:) 
     forControlEvents: UIControlEventTouchUpInside]; 

Sonra olay işleyicisi şu şekilde görünecektir: senin -tableView:cellForRowAtIndexPath: işlevi içinde gibi bir şey yapacağını yani kullanıcı bir satırda bir düğmeye dokunduğunda çağrılmaz

- (void) buttonPressed: (id) sender withEvent: (UIEvent *) event 
{ 
    UITouch * touch = [[event touches] anyObject]; 
    CGPoint location = [touch locationInView: self.tableView]; 
    NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: location]; 

    /* indexPath contains the index of the row containing the button */ 
    /* do whatever it is you need to do with the row data now */ 
} 
+6

hafif düzeltme ... [etkinlik dokunuşları] [etkinlik allTouches] olmalıdır – dizy

+0

harika! Bu tam olarak aradığım şey ... teşekkürler ... – mshsayem

6

ilgili bir fikrin bölüm) int row = indexPath.row;

+2

; Sadece satır arkaplanının kendisine dokunduğunda denir. –

8

Birkaç düşünceler:

Bir UITableViewCell bulana kadar düğmenin Superview hiyerarşisi içinde yineleme, sonra çağrı - (NSIndexPath *) indexPathForCell: UITableView (UITableViewCell *) hücresi.

- (void)buttonClicked:(id)sender { 
    UIView *button = sender; 

    for (UIView *parent = [button superview]; parent != nil; parent = [parent superview]) { 
    if ([parent isKindOfClass: [UITableViewCell class]]) { 
     UITableViewCell *cell = (UITableViewCell *) parent;   
     NSIndexPath *path = [self.tableView indexPathForCell: cell]; 

     // now use the index path 

     break; // for 
    } 
    } 
} 

Sen dönüşümlü satıra başvuran bir dizin depolamak için düğmeye etiketi kullanabilirsiniz. Bu sadece tek bir tamsayı tutar, bu nedenle tek bir bölümünüz olduğunda veya satırlarınızı düz bir liste olarak yönetirken en mantıklısı olur.

Düğmeyi kapsüllemek için UITableViewCell'i alt sınıf olarak değiştirebilirsiniz. UITableViewCell'iniz düğme olaylarına cevap verebilir ve bir etkinliği kendi delegesine göndererek kendi kendini geçebilir. Olay temsilcisi daha sonra dizin yolunu almak için UITableView üzerinde - (NSIndexPath *) indexPathForCell: (UITableViewCell *) hücresini çağırabilir. senin UITableViewCell subclassTo örnek değişken hücresinin endeksi yolunu saklayabilir

1

Ekleme:

NSIndexPath *myIndexPath; 

Eğer hücreyi oluştururken: Yeni oluşturulan için indexPath içinde

cellForIndexPath: 

geçişte/geri dönüştürülmüş hücre.

Düğmeye bastığınızda, hücrenin ivar dizin dizinini okumanız yeterlidir.