2012-08-30 22 views
8

seçimini yapmaktan ayrı. Bazı görevler görüntülediğim bir UITableview var ve her satırın görevleri tamamlandı veya işaretlememek için bir onay kutusu var.UITableViewCell AccessoryView öğesinin seçilmesi, satır

Kullanıcı onay kutusunu işaretlediğinde onay işaretini değiştirmek istedim ve kullanıcı satırda dokunduğunda ayrıntılı bir görünüme geçin. İkincisi sadece

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

Ancak, seçim alanlarını ayırmak istediğini kullanılarak accessoryview seçildiğinde sadece onay kutusunu geçmek ve hücrenin geri kalanı seçildiğinde sadece ayrıntıları görünümüne giderek kolaydır.numaralı telefonuiçine eklediğimde, kullanıcı yalnızca VEYA onay kutusuna tıklamak istediğinde UIButton satırını seçiyordu, değil mi?

Ayrıca, kullanıcı yalnızca accessoryview boyunca sürükleyerek tablo görünümünde geziniyorsa? Bu, TouchUp'da UIButton üzerinde bir eylem tetiklemez mi?

Bunun nasıl yapılacağı konusunda herhangi bir fikri olan var mı? Zaman ayırdığın için teşekkürler!

cevap

16

Bu nasıl temsilci yönteminin içine aksesuar musluklar yönetme hakkında:

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

DÜZENLEME:

Sen accessoryButtonTappedForRowWithIndexPath: yöntemine yanıt özel accessoryView için böyle bir şey yapabilirsiniz. cellForRowAtIndexPath: Yöntemi

-

BOOL checked = [[item objectForKey:@"checked"] boolValue]; 
UIImage *image = (checked) ? [UIImage imageNamed:@"checked.png"] : [UIImage imageNamed:@"unchecked.png"]; 

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
CGRect frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height); 
button.frame = frame; 
[button setBackgroundImage:image forState:UIControlStateNormal]; 

[button addTarget:self action:@selector(checkButtonTapped:event:) forControlEvents:UIControlEventTouchUpInside]; 
button.backgroundColor = [UIColor clearColor]; 
cell.accessoryView = button; 

- (void)checkButtonTapped:(id)sender event:(id)event 
{ 
    NSSet *touches = [event allTouches]; 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentTouchPosition = [touch locationInView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition]; 
    if (indexPath != nil) 
    { 
    [self tableView: self.tableView accessoryButtonTappedForRowWithIndexPath: indexPath]; 
    } 
} 

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 
{ 
    NSMutableDictionary *item = [dataArray objectAtIndex:indexPath.row]; 
    BOOL checked = [[item objectForKey:@"checked"] boolValue]; 
    [item setObject:[NSNumber numberWithBool:!checked] forKey:@"checked"]; 

    UITableViewCell *cell = [item objectForKey:@"cell"]; 
    UIButton *button = (UIButton *)cell.accessoryView; 

    UIImage *newImage = (checked) ? [UIImage imageNamed:@"unchecked.png"] : [UIImage imageNamed:@"checked.png"]; 
    [button setBackgroundImage:newImage forState:UIControlStateNormal]; 
} 
+1

nasıl özel aksesuar düğme geri tablo görünümün delegesinecevap aramaya alabilirim? –

+0

Vay, bunu nasıl özledim bilmiyorum, aptal soru için özür dilerim ve yardım için teşekkürler! Bir şut vereceğim, aradığım şey buydu. – Cody

+1

@CarlVeazey İyi bir nokta, belgelerin aksesuarButtonTappedForRowWithIndexPath, bir onay kutusu istediğimden beri kullanmak istediğim tip olan açıklama düğmesi aksesuar türüne yanıt verdiğini söylüyor. Ayrıntılı görünüm için açıklama düğmesini kullanarak ve satırın geri kalanındaki bir onay işaretini değiştirmek için satırın geri kalanına dokunarak bunu yapabilirim, ancak istediğim bu değil. – Cody