2010-05-05 11 views
10

ochoty jadę nieco orzechowy tutaj. Mam widok z kilku autonomicznych UITextField s, kilka UITextFields w UITAbleViewCell S i jednym UITableViewCell, które będą używane do przechowywania notatek, czy istnieją jakiekolwiek szczegóły. Chcę, aby ta komórka była możliwa do wybrania, gdy jestem w trybie edycji. Kiedy nie jestem w trybie edycji, nie chcę móc go wybrać. Wybranie komórki (w trybie edycji) uruchomi metodę, która zainicjuje nowy widok. Wiem, że to bardzo łatwe, ale gdzieś czegoś mi brakuje.Prawidłowo konfigurowania willSelectRowAtIndexPath i didSelectRowAtIndexPath wysłać pozycje komórkowych

Oto obecne metody selekcji używam:

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (!self.editing) { 
     NSLog(@"Returning nil, not in edit mode"); 
     return nil; 
    } 
    NSLog(@"Cell will be selected, not in edit mode"); 
    if (indexPath.section == 0) { 
     NSLog(@"Comments cell will be selected"); 
     return indexPath; 
    } 
    return nil; 
} 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (!self.editing) { 
     NSLog(@"Not in edit mode. Should not have made it this far."); 
     return; 
    } 

    if (indexPath.section == 0) 
     [self pushCommentsView]; 
    else 
     return; 
} 

Mój problem jest naprawdę 2-krotnie;

1) Nawet jeśli nie jestem w trybie edycji i wiem, że wracam nil (z powodu komunikatu NSLog), nadal mogę wybrać wiersz (miga na niebiesko). Z mojego zrozumienia metody willSelectRowAtIndexPath nie powinno się tak dziać. Może się mylę?

2) Kiedy wejść w tryb edycji, nie mogę w ogóle cokolwiek wybrać. metoda willSelectRowAtIndexPath nigdy pożary, a nie robi didSelectRowAtIndexPath. Jedyne, co robię w metodzie setEditing, to ukrywanie przycisku Wstecz podczas edytowania i przypisywanie firstResponder do górnego pola tekstowego, aby klawiatura pojawiła się. Pomyślałem, że być może pierwszy responder staje na drodze do kliknięcia (co byłoby głupie), ale nawet z tym skomentowanym, nie mogę wykonać wyboru komórki podczas edycji.

Odpowiedz

16

Dobry panie, jestem idiotą. Nigdy nie dodałem tych linii:

self.tableView.allowsSelection = NO; // Keeps cells from being selectable while not editing. No more blue flash. 
self.tableView.allowsSelectionDuringEditing = YES; // Allows cells to be selectable during edit mode. 

Przepraszamy za pytanie o śmieci.

+1

W Xcode 4.2/iOS5 można je ustawić w TableView in Interface Builder. –

+0

Rozwiązano, wybierając opcję "Pojedynczy wybór" w opcji "wybór" Storyboard/Interface Builder. DZIĘKI! –

4

Dokumentacja zauważa, że ​​tableView:willSelectRowAtIndexPath: nie jest wywoływana, gdy w trybie edycji. Ponadto niebieski błysk nastąpi nawet po anulowaniu wyboru. Z dokumentacji:

Ta metoda nie jest wywoływana, dopóki użytkownik nie dotknie rzędu, a następnie nie podniesie palca; wiersz nie zostanie wybrany do tego czasu, chociaż podświetlony jest przy dotknięciu. Możesz użyć opcji UITableViewCellSelectionStyleNone, aby wyłączyć wyświetlanie podświetlenia komórki po dotknięciu. Ta metoda nie jest wywoływana, gdy właściwość edycji tabeli jest ustawiona na TAK (to znaczy widok tabeli jest w trybie edycji).

+1

Dzięki za odpowiedź. Mam podwójną kontrolę dokumentów, co uświadomiło mi mój głupi błąd. –

+0

Po prostu chcesz wyjaśnić tę odpowiedź, cytując całą dokumentację: "... Ta metoda nie jest wywoływana, gdy widok tabeli jest w trybie edycji (to znaczy, właściwość edycji widoku tabeli jest ustawiona na TAK) ** chyba że widok tabeli pozwala na wybór podczas edycji (tzn. właściwość allowSelectionDuringEditing widoku tabeli jest ustawiona na YES). ** " – Pat