2011-09-08 28 views
6

UITableView'da özel bir hücre için NSIndexPath'u almam gerekiyor. İşte sorun: Özel hücremde özel hücremden editingDidBegineditingDidBegin benim UITableViewController'a gönderdiğimde. Benim UITableViewController, UITextField düzenlemeye başladı ve UITextField ilk yanıtlayıcı olduğu hücre görünümüne kaydırmak için tablo görünümünü görüntülemek istediğinizde UITableView yeniden boyutlandırın. Ancak, UITextField'un düzenlendiği hücrenin indexPath'unu nasıl iade edeceğimi anlayamıyorum. Çok fazla yol denedim ama hala çalışmıyor. Tek yönlü şudur: Ben [self.tableV indexPathForSelectedRow] satırını NSLog eğer benim cstomCell sınıfta ben hep bile onun her zaman olmasa 0.Özel hücreden NSIndexPath döndürün? (UITableView)

+0

Sadece "çerçevesini" almak istemez miydin? – aopsfan

cevap

14

Sadece hücreye için bir değer vermek 0 döndürür [self setSelected:YES] sonra benim TV kumandasından kullanarak satırı seçin tag özelliği. Eğer bu

NSIndexPath *indexPath = [self.tableView indexPathForCell:nextResponderCell]; 

gibi NSIndexPath alabilirsiniz hücreyi bir kez sen içinde cell.textField.delegate = self; yerleştirebilirsiniz özel hücrede bir UITextField beri Sonra sonra bu

UITableViewCell *cell = (UITableViewCell *)[self.tableView viewWithTag:tagValue]; 

arayarak bu hücreyi alabilirsiniz

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

veri kaynağı yöntemi. Bu şekilde, Özel Hücrede bir NSNotification ayarlamak zorunda kalmayacaksınız. Ayrıca, bu aynı yöntemle size Şimdi UITextField temsilci ayarladığınız hem hücreleri metin bu cell.textField.tag = indexPath.row; gibi sahada ve bu cell.tag = indexPath.row;

gibi hücreyi etiketleyebilir, artık UITableViewController sınıfında bu yöntemi yerleştirebilirsiniz

- (void)textFieldDidBeginEditing:(UITextField *)textField { 

    CustomCell *cell = (CustomCell *)[self.tableView viewWithTag:textField.tag]; 

    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];   

} 

Yukarıdaki UITextField temsilci yöntemi, şu anda seçtiğiniz hücrenin indexPath dizinini almalıdır.

+0

Anlamadım, lütfen biraz daha kod verin. İki kod satırı arasında bir ilişki yok, lütfen bana hangi kodu koyacağımı söyle. – JonasG

+0

@Maxner Cevabımı düzenledim. Umarım herhangi bir karışıklığı temizler. – ms83

-1

ben şöyle benim hücrelerini etiketlemek istiyorum:

/* Create a tag based on the section and row of a cell(used to retrive the cell for the beginEditingNextCell method. */ 
-(NSInteger)tagForIndexPath:(NSIndexPath*)path { 
    return path.section * 1000 + path.row + 1; 
} 

diğer yolu özel temsilci kullanarak beginEditing verileri aktarmak için, ve sonra senin yolunu anlamaya kullanabileceğiniz bir hücre modeli içermektedir Verileri nasıl depoladığınıza bağlı olarak.

Kontrol dışarı benim github proje, bu klavye için yeniden boyutlandırma ve sonraki düzenlenebilir hücreye sekme yanı sıra bu durumun ele alınması kodu vardır: .. https://github.com/andrewzimmer906/XCell

+0

Github projeniz tam bir karmaşa, en az 20 hata ve derleme konusunda uyarılar. Lütfen bana daha fazla kod verebilir misiniz, sadece sorumu ilgilendirir misiniz? 50 tane açık lütuf var. – JonasG

0

bu kodu deneyin

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    UITableView *tableView; 
    UITableViewCell* superViewCell = [self returnSuperCellViewOfTextField:textField]; 
    if(superViewCell)[tableView scrollToRowAtIndexPath:[tableView indexPathForCell:superViewCell] atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; 
} 

-(id)returnSuperCellViewOfTextField:(id)viewToCheck 
{ 
    id superView = [viewToCheck superview]; 
    if([viewToCheck isKindOfClass:[UITableViewCell class]] && superView)return superView; 
    else if(([viewToCheck respondsToSelector:@selector(superview)] && superView)) return [self returnSuperCellViewOfTextField:superView]; 
    return nil; 
} 
0

bu (aşağıda daha önce verdiğim cevap) birberi her hücrede ?:

UITableViewCell *cell = (UITableViewCell *)[self.tableView viewWithTag:tagValue]; 
then once you have the cell you can get the NSIndexPath like this 

NSIndexPath *indexPath = [self.tableView indexPathForCell:nextResponderCell]; 

birden texfields varsa hala çalışır mı Özel hücredeEğer

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

veri kaynağı yönteminde cell.textField.delegate = self; yerleştirebilirsiniz. Ayrıca, aynı yöntemde, bu hücrelere ait metin alanlarını bu cell.textField.tag = indexPath gibi etiketleyebilirsiniz.kürek çekmek; ve bu hücre gibi hücre.tag = indexPath.row; Şimdi UITextField temsilci ayarladığınız

, artık

- (void)textFieldDidBeginEditing:(UITextField *)textField { 

    CustomCell *cell = (CustomCell *)[self.tableView viewWithTag:textField.tag]; 

    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

Ben 8 hücreleri ile bir tableView sahiptir ve her hücrede i 6 texfields var ve ayrıca UITableViewController sınıfında bu yöntemi yerleştirebilirsiniz tableview dinamiktir, bu yüzden kullanıcı daha fazla hücre ekleyebilir ... ancak kullanıcının her bir metin alanına girdiği metnin nasıl kaydedileceği konusunda sıkıntı yaşıyorum. "Cell.textField.tag = indexPath.row" ile denetleyici, içinde bulunduğum texfield'ı tanımlar mı?