19

Birden fazla UITabBarItems içeren bir UITabBarController var, bu yüzden moreNavigationController kullanılabilir durumda. Benim UITabBarController Delegesi olarakIndexPath tabanlı hücre metni nasıl alınır?

Ben aşağıdakileri yapın:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
//do some stuff 
//... 

UITableView *moreView = (UITableView *)self.tabBarController.moreNavigationController.topViewController.view; 
    moreView.delegate = self; 
} 

Ben bu yüzden seçildi satır yakalayabilir bir UITableViewDelegate uygulamak istiyorum, özel bir görünüm özelliğini ayarlayın ve sonra görünümü denetleyicisi itmek:

- (void)tableView:(UITableView *)tblView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //how can I get the text of the cell here? 
} 

Kullanıcı bir satırda dokunduğunda bir hücrenin metnini almam gerekir. Bunu nasıl başarabilirim?

cevap

52
- (void)tableView:(UITableView *)tblView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     //how can I get the text of the cell here? 
     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
     NSString *str = cell.textLabel.text; 
} 

Daha iyi bir çözüm hücrenin Diziyi korumak ve neden hücrenin bir dizi korumak için daha iyidir doğrudan buraya

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    Service *service = [self.nearMeArray objectAtIndex:indexPath.row]; 
    cell.textLabel.text = service.name; 
    cell.detailTextLabel.text = service.description; 
    if(![self.mutArray containsObject:cell]) 
      [self.mutArray insertObject:cell atIndex:indexPath.row]; 
    return cell; 
} 



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

    UITableViewCell *cell = [self.mutArray objectAtIndex:indexPath.row]; 
    NSString *str = cell.textLabel.text; 

} 
+3

kullanmak mı? Sadece seçilen hücreyi yakalamak için cellForRowAtIndexPath'ı çağırırsanız, – user592419

+0

tekrar tüm işlevini yürütecek ve tekrar hücre oluşturacaktır. Hangisinin daha önce oluşturulmuş olan hücreyi –

+0

dizisinde saklamak için performansı yüksek maliyetle karşılaştırırsanız, insertObject işlevini kullanırsanız diziniz hiçbir zaman hemen hemen her yerde olur. Dokümanlar, "İndeks zaten kullanılıyorsa, dizin ve öndeki nesneler, yer açmak için dizinlerine 1 eklenerek kaydırılır." Böylece, cellForRowAtIndexPath ikinci kez çağrıldığında (belki de kaydırdıktan sonra) aynı hücre eklenir, ancak orijinal ve diğer tüm hücreler dizide ileriye doğru itilir. – amergin

İlgili konular