2011-10-17 2 views
5

Użyłem następujących sugerowanych rutynę, aby zmienić przycisk szczegół ujawnienie wizerunku w komórce widoku tabeli (w Tableview cellForRowAtIndexPath)Zmiana wizerunku dla przycisku detal ujawnienia (Xcode 4.2)

if (cell == nil) { 

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 

    UIButton *myAccessoryButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)]; 
    [myAccessoryButton setBackgroundColor:[UIColor clearColor]]; 
    [myAccessoryButton setImage:[UIImage imageNamed:@"ball"] forState:UIControlStateNormal]; 
    [cell setAccessoryView:myAccessoryButton]; 
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 
} 

Jednak wydarzenie tableView accessoryButtonTappedForRowWithIndexPath nie jest już wywoływany po kliknięciu przycisku.

Czy ktoś ma pomysły, dlaczego?

Odpowiedz

5

Mam ten sam problem w moim projekcie.

Ktoś wie, jak to zrobić?

Tnx

Edit:

spojrzenie na tej post ... to jest praca dla mnie.

+1

+1 ale wciągnął szczegóły w osobnej odpowiedzi poniżej, aby uniknąć konieczności opuszczania SO – Rhubarb

6

Otrzymałem + 1 odpowiedź Fry, ale tylko po to, aby pobrać kod z drugiej strony, aby SO był bardziej kompletny: Odpowiedź jest taka, że ​​musisz pobrać akcesoriumButtonTapped .... połączenie nie zostanie wykonane automatycznie jako to byłoby dla wbudowanego szczegółowego ujawnienia, więc musisz zrobić to sam z celem przycisku.

Przełożenie z kodem link do swojego powyższym przykładzie, należy dodać ten wiersz po setImage:

[myAccessoryButton addTarget:self action:@selector(accessoryButtonTapped:event:) forControlEvents:UIControlEventTouchUpInside]; 

Następnie dodać to później:

- (void)accessoryButtonTapped:(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]; 
    } 
} 

(dosłownej od this link)

Zauważ, że zakłada to, że przycisk jest tworzony w UITableViewController (w moim przypadku tworzę go w niestandardowej komórce, więc referencje są nieco inne nt)

Objaśnienie: element accessoryButtonTapped jest niestandardową metodą docelową dla przycisku niestandardowego. Po naciśnięciu przycisku ("TouchUpInside") odnajdujemy wartość indexPath komórki w punkcie, w którym nastąpiło tłoczenie, i wywołujemy metodę, którą zwykle wywołuje widok tabeli.

+0

Świetne ... podobne wdrożenie jest tutaj: http://iosdevblog.com/2014/07/26/custom-image- przycisk szczegółowego ujawnienia szczegółów / – plusangel