2011-09-17 17 views
6

İçinde iki eylemle ilgili bir masa görüşüm var, ilk önce ben delegeyi didSelectRowAtIndexPath kullanın, ikincisi için başka bir şey yapmak için hücremdeki bir düğmede bir eylem kullanmak istiyorum. Benim problemim indeks yolunu elde etmeyi başaramam değil mi? Bunu yapmak için en iyi uygulama nedir? Eğer olarak endeks yolunu alabilirsiniz siz hücreye düğme eklediysenizBir hücrede düğme eyleminden indexPath tablo görünümünde nasıl alınır?

+0

olası yineleme [IOS 7 - UITableViewCell'e yerleştirilen düğmeden indexPath nasıl alınır] (http://stackoverflow.com/questions/19000356/ios-7-how-to-get-the-indexpath-from-button-placed- in-uitableviewcell) –

cevap

9

ardından

[cell.contentView addSubview:button]; 

, burada

- (void)onButtonTapped:(UIButton *)button { 

    UITableViewCell *cell = (UITableViewCell *)button.superview.superview; 
    NSIndexPath *indexPath = [tableView indexPathForCell:cell]; 
    // Go ahead 
} 
+0

Teşekkürler! UIButton * button = (UIButton *) gönderen; UITableViewCell * cell = (UITableViewCell *) button.superview.superview; –

+0

Tamam! Hoşgeldiniz! – EmptyStack

+1

Masaüstüne süper görünümden erişmemelisiniz. Bu şimdi çalışıyor olsa da yeni bir iOS üzerinde çalışmayabilir. 6/7 Apple'dan klasik örnek başka bir süper görüntü ekledi. Bu, – CW0007007

1

özel bir düğme için tam kodudur:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    CustomCellFilter *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (!cell) {cell = [[CustomCellFilter alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];} 

    //configure your cell here 
    cell.titleLabel.text = @"some title"; 

    //add button 
    UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    resetButton.frame = CGRectMake(40, 10, 18, 18); 
    [resetButton addTarget:self action:@selector(onButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
    [resetButton setImage:[UIImage imageNamed:@"someimage.png"] forState:UIControlStateNormal]; 
    [cell.contentView addSubview:myButton]; 

    //afterwards return the cell 
    return cell; 

- (void)onButtonTapped:(UIButton *)button { 

    UITableViewCell *cell = (UITableViewCell *)button.superview.superview; 
    NSIndexPath *indexPath = [filterTable indexPathForCell:cell]; 
    NSLog(@"%@", indexPath); 
    //use indexPath here... 
} 
-1

Düğmeniz taşınırsa veya Apple görünüm görünümleri için görünüm hiyerarşisini değiştirirse, bu yöntem görünecek şekilde zincire gider. Bir UITableViewCell için:

- (void)tapAccessoryButton:(UIButton *)sender { 
    UIView *parentView = sender.superview; 

// the loop should take care of any changes in the view heirarchy, whether from 
// changes we make or apple makes. 
    while (![parentView.class isSubclassOfClass:UITableViewCell.class]) 
     parentView = parentView.superview; 

    if ([parentView.class isSubclassOfClass:UITableViewCell.class]) { 
     UITableViewCell *cell = (UITableViewCell *) parentView; 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
     [self tableView:self.tableView accessoryButtonTappedForRowWithIndexPath:indexPath]; 
    } 
} 
2

Bu çözümü kullanıyorum - hücre kullanarak noktalarının

endeksi yolunu alma
CGPoint center= [sender center]; 
CGPoint rootViewPoint = [[sender superview] convertPoint:center toView:_tableView1]; 
NSIndexPath *indexPath = [_tableView1 indexPathForRowAtPoint:rootViewPoint]; 
NSLog(@"%@",indexPath); 

mükemmel durumda

+0

kilitlenir Bu, 'superView.superView' kullanmak yerine daha uygun olur – Mrug

0

bir koleksiyon görünümü kullandığınız Onun işi, sen Yogesh yöntemini kullanabilir, ancak indexPathForItemAtPoint için indexPathForRowAtPoint değerini şu şekilde değiştirebilirsiniz:

CGPoint center= [sender center]; 
CGPoint rootViewPoint = [[sender superview] convertPoint:center toView:_tableView1]; 
NSIndexPath *indexPath = [_tableView1 indexPathForRowAtPoint:rootViewPoint]; 
NSLog(@"%@",indexPath); 
İlgili konular