2013-05-25 9 views
10

Ich habe vier UITableViews Seite-an-Seite, programmgesteuert erstellt. Problem 1: Die erste Zelle ist immer leer. Problem 2: Wenn ich nach unten blättern, sind einige Zellen leer. Wenn ich vor- und zurückschaue, verschwinden andere Zellen. HierEinige UITableView-Zellen verschwinden nach dem Scrollen nach unten und dann zurück

ist der Code, wo die UITableViews erstellt werden, und ihre Zellen sind so eingestellt ...

Array von UITableViews am Anfang erklärt der .m Datei:

UITableView* channel_tableView[ TOTAL_TX_CHANNELS ]; 

In Funktion viewDidLayoutSubviews erstelle ich die UITableView :

for(int channel=0; channel < TOTAL_TX_CHANNELS; ++channel){ 
CGRect tableFrame = CGRectMake(x, y, width, height); 

channel_tableView[ channel ] = [[UITableView alloc]initWithFrame:tableFrame style:UITableViewStylePlain]; 

channel_tableView[ channel ].scrollEnabled = YES; 
channel_tableView[ channel ].userInteractionEnabled = YES; 
channel_tableView[ channel ].bounces = YES; 

channel_tableView[ channel ].delegate = self; 
channel_tableView[ channel ].dataSource = self; 

channel_tableView[ channel ].autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth; 
[channel_tableView[ channel ] reloadData];    // display channel's TableView 
[[self view] addSubview: channel_tableView[ channel ]]; 

}

hier ist, wo jede Zelle SET .......................

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"cellForRowAtIndexPath"); 
    NSLog(@" %d = row", indexPath.row ); 



    UITextView* test_textView; 
    UITextView* test_2nd_textView; 
    UITextView* test_3rd_textView; 


    // Determine which channel_tableView: 
     int channel; 
     for(channel = 0; channel < TOTAL_TX_CHANNELS; ++channel) 
     { 
      if(tableView == channel_tableView[ channel ]) 
       break; 
     } 
     // channel = tableView's channel 
     NSLog(@" %d = channel", channel ); 

    // DOCUMENTATION: Table View Programming Guide for iOS > Adding subviews to a cellís content view 

    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     NSLog(@"  cell nil"); 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: CellIdentifier]; 
     /* Though it's UITableViewCellStyleDefault, the three defaults (image, label, detail label) are nil 
     if not set. */ 
    } 
     // Add UITextView for channel pipe to cell: 
      int pipe_width = 20; 
      int w = pipe_width; 
      int x = channel_tableView_width/2 - pipe_width/2; 
      int h = channel_row_height; 
      int y = 0; 
      test_textView = [[UITextView alloc] initWithFrame:CGRectMake (x,y, w,h)] ; 
      [test_textView setFont:[UIFont boldSystemFontOfSize:8.0]]; 
      [test_textView setEditable:NO]; 
      [test_textView setTextAlignment:NSTextAlignmentCenter]; 
      // Round the corners and set border color 
      if(channel == power_channel) 
       [test_textView setBackgroundColor:[UIColor greenColor]]; 
      else 
       [test_textView setBackgroundColor:[UIColor whiteColor]]; 
      [[test_textView layer] setBorderColor:[[UIColor blackColor] CGColor]]; 
      [[test_textView layer] setBorderWidth:1]; 
      //[[test_textView layer] setCornerRadius:15]; 
      [test_textView setClipsToBounds: YES]; 


     // Add UITextView for PWR RX to cell: 
     int PWR_RX_width = channel_tableView_width/2; 
     y = y + h ; 
     w = PWR_RX_width; 
     x = channel_tableView_width/2 - PWR_RX_width/2; 
     h = 20; 
      test_2nd_textView = [[UITextView alloc] initWithFrame:CGRectMake (x,y, w,h)]; 
      [test_2nd_textView setFont:[UIFont boldSystemFontOfSize:8.0]]; 
      [test_2nd_textView setEditable:NO]; 
      [test_2nd_textView setTextAlignment:NSTextAlignmentCenter]; 
      // Round the corners and set border color 
      [test_2nd_textView setBackgroundColor:[UIColor whiteColor]]; 
      [[test_2nd_textView layer] setBorderColor:[[UIColor blackColor] CGColor]]; 
      [[test_2nd_textView layer] setBorderWidth: 1]; 
      //[[test_2nd_textView layer] setCornerRadius:15]; 
      [test_2nd_textView setClipsToBounds: YES];  

     // Add UITextView for device to cell: 
     int device_width = channel_tableView_width/2; 
     y = y + h-3; 
     w = device_width; 
     x = channel_tableView_width/2 - device_width/2; 
     h = 40; 
      test_3rd_textView = [[UITextView alloc] initWithFrame:CGRectMake (x,y, w,h)]; 
      [test_3rd_textView setFont:[UIFont boldSystemFontOfSize:8.0]]; 
      [test_3rd_textView setEditable:NO]; 
      [test_3rd_textView setTextAlignment:NSTextAlignmentCenter]; 
      // Round the corners and set border color 
      [test_3rd_textView setBackgroundColor:[UIColor whiteColor]]; 
      [[test_3rd_textView layer] setBorderColor:[[UIColor blackColor] CGColor]]; 
      [[test_3rd_textView layer] setBorderWidth: 1]; 
      //[[test_3rd_textView layer] setCornerRadius:15]; 
      [test_3rd_textView setClipsToBounds: YES]; 

     /* 
       test_textView.tag = TEST_TEXTVIEW_TAG; 
       test_2nd_textView.tag = TEST_2ND_TEXTVIEW_TAG; 
       test_3rd_textView.tag = TEST_3RD_TEXTVIEW_TAG; 

     test_textView  = (UITextView*)[cell.contentView viewWithTag: TEST_TEXTVIEW_TAG]; 
     test_2nd_textView = (UITextView*)[cell.contentView viewWithTag: TEST_2ND_TEXTVIEW_TAG]; 
     test_3rd_textView = (UITextView*)[cell.contentView viewWithTag: TEST_3RD_TEXTVIEW_TAG]; 
     */ 
    //[test_textView setText:  [NSString stringWithFormat: @"pipe-%d", indexPath.row ]]; 
    [test_2nd_textView setText: [NSString stringWithFormat: @"PWR RX %d", indexPath.row ]]; 
    [test_3rd_textView setText: [NSString stringWithFormat: @"device %d", indexPath.row ]]; 
      // Add created UI objects to cell[ indexPath.row ]: 
       [cell.contentView addSubview:test_textView ]; 
       [cell.contentView addSubview:test_2nd_textView ]; 
       [cell.contentView addSubview:test_3rd_textView ]; 
    return cell; 
} 
+0

Sie nicht gleiche cellIdentifier für alle Tabellen verwenden soll. versuch [NSString stringWithFormat: @ "cell% d", chanel]; – Durgaprasad

Antwort

14

benötigen Sie CellIdentifier wie Bellow zu definieren: -

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *CellIdentifier = [NSString stringWithFormat:@"%d_%d",indexPath.section,indexPath.row]; 



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

    cell.textLabel.text = @"Test"; 
    cell.textLabel.textColor=[UIColor whiteColor]; 
    return cell; 
} 

NSString *CellIdentifier = [NSString stringWithFormat:@"%d_%d",indexPath.section,indexPath.row];

dies kann Ihnen helfen,

+1

Danke, Nitin! Dies hat mich dazu gebracht, endlich das Zelldatenstrukturverhalten zu verstehen. In meinem Fall hatte ich 4 TableViews, also muss meine Zellenkennung eine Funktion der Kanalnummer UND Zeilennummer sein. Scrollt jetzt, ohne Werte zu ändern. O N E L A S T B U N G: Die erste Zeile am Anfang jedes der 4 Tabellen ist immer leer, auch nach dem Scrollen nach unten und wieder zurück. Aber NSLog zeigt, dass Zeile 0 eine Zelle bekommt. –

+0

Hallo Dauglas beziehen Sie sich bitte darauf: -http: //stackoverflow.com/questions/6805669/ios-objective-c-only-the-first-cell-of-guitableview-doesnt-show-the-label-i-add –

+1

+1 Vielen Dank, das hat mir geholfen – iMeMyself

0

u haben eine Reihe von Wörterbuch heften und fügen Ihr textfiled Daten mit dem indexpath.row nach scroll tableview.

siehe mein Beispiel

NSMutableDictionary *dicttable=[NSMutableDictionary dictionaryWithDictionary:[arrofselect  objectAtIndex:indexPath.row]]; 
    [dicttable setValue:[NSString stringWithFormat:@"%@",self.other_text.text] forKey:@"AnswerId"]; 
    [dicttable setValue:[[arrQuestions objectAtIndex:indexPath.row] valueForKey:@"QuestionID"] forKey:@"QuestionID"]; 
    [arrofselect replaceObjectAtIndex:indexPath.row withObject:dicttable]; 

u, dass Wörterbuch basiert indexapth.row Variablenwerte ersetzen, wenn die Textbearbeitung in

  • (void) textFieldDidBeginEditing: (UITextField *) textfield
  • (void) textFieldDidEndEditing: (UITextField *) TextFeld

genießen Sie ... chee rs

+0

Wenn Sie irgendwelche Fragen haben, lassen Sie es mich wissen ... – Anjaneyulu

4

Ich hatte das gleiche Problem, aber für mich waren es die Eigenschaften der Elemente in der UITableviewCell. Ich schlage vor, dass Sie eine benutzerdefinierte Zelle verwenden und die Textfelder mit dem NIB oder StoryBoard erstellen. Dann erstellen Stellen für sie in der benutzerdefinierten Zelle Klasse mit der folgenden Signatur:

@property (strong, nonatomic) IBOutlet UITextField *myText; 

Der wichtigste Teil ist die starke und nicht die schwache Eigenschaft zu verwenden.

Hier ist ein link zu meinem Beitrag.

Viel Glück und hoffe diese Hilfe!

+0

Ich konnte Storyboard nicht verwenden, weil die Kinder von UI-Objekten in den Zellen während der Laufzeit ändern werden.Aber ich nehme an, ich könnte jede Zelle zur Build-Zeit mit dem gleichen Satz von UI-Objekten auffüllen und dann anzeigen, was zur Laufzeit benötigt wird. –

Verwandte Themen