如何在tableview控制器目标c中生成静态单元格



这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *cellIdent = @"mycal";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdent];
    yes=(UIButton *)[cell viewWithTag:1];
    no=(UIButton *)[cell viewWithTag:2];
  /*  if(cell == nil)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdent];

    // Configure the cell...
    cell.textLabel.text=[mathcal objectAtIndex:indexPath.row];
    if([arSelectedRows containsObject:indexPath]) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }*/
    int firstNumber=0,lastNumber = 0,calculation,ans=0;
    int todisplay= [self getRandomNumberBetween:0 to:1];
    NSLog(@"to display:::%d",todisplay);
    if(finalanswers==nil)
    {
        finalanswers=[[NSMutableArray alloc]init];
    }
    [finalanswers addObject:[NSNumber numberWithInt:todisplay]];
        NSLog(@"finalanswers::::%@",finalanswers);
    calculation=[self getRandomNumberBetween:0 to:3];
    NSLog(@"cat value %@",mathCat);
    if ([mathCat isEqualToString:@"Easy"]) {
        firstNumber = [self getRandomNumberBetween:1 to:9];
        lastNumber = [self getRandomNumberBetween:1 to:9];
       // NSLog(@"firstNumber %d lastnumber %d",firstNumber,lastNumber);
    }
    else if ([mathCat isEqualToString:@"Medium"]){
        firstNumber = [self getRandomNumberBetween:10 to:99];
        lastNumber = [self getRandomNumberBetween:10 to:99];
       // NSLog(@"firstNumber %d lastnumber %d",firstNumber,lastNumber);
    }
    else if ([mathCat isEqualToString:@"Hard"]){
        firstNumber = [self getRandomNumberBetween:100 to:999];
        lastNumber = [self getRandomNumberBetween:100 to:999];
       // NSLog(@"firstNumber %d lastnumber %d",firstNumber,lastNumber);
    }
   // NSLog(@"calc value is -->  %@",[mathcal objectAtIndex:calculation]);


    //cell.textLabel.text = [NSString stringWithFormat: @"%d+%d=%d",firstNumber,lastNumber,todisplay];
    if (todisplay==0) {
        if (calculation==0) {
            ans=firstNumber+lastNumber;
            answer=[NSString stringWithFormat:@"%d + %d=%d",firstNumber,lastNumber,ans];
            cell.textLabel.text=answer;
            return cell;
        }
        else if (calculation==1){
            ans=firstNumber-lastNumber;
            answer=[NSString stringWithFormat:@"%d - %d=%d",firstNumber,lastNumber,ans];
            cell.textLabel.text=answer;
            return cell;
        }
        else if (calculation==2){
            ans=firstNumber*lastNumber;
            answer=[NSString stringWithFormat:@"%d * %d=%d",firstNumber,lastNumber,ans];
            cell.textLabel.text=answer;
            return cell;
        }
        else if (calculation==3){
            ans=firstNumber/lastNumber;
            answer=[NSString stringWithFormat:@"%d / %d=%d",firstNumber,lastNumber,ans];
            cell.textLabel.text=answer;
            return cell;
        }
    }
    else if (todisplay==1){
        int ans=[self getRandomNumberBetween:10 to:50];
        answer=[NSString stringWithFormat:@"%d+%d=%d",firstNumber,lastNumber,ans];
        cell.textLabel.text=answer;
        return cell;
    }
      return cell;
}
-(int)getRandomNumberBetween:(int)from to:(int)to {
    return (int)from + arc4random() % (to-from+1);
}

您得到的是随机问题,因为每次滚动时,一个新的单元格变得可见,您就会掷骰子并生成另一个问题。

您应该预先生成所有随机问题,而不是使用cellForRowAtIndexPath方法。

所以,您应该生成一个随机数数组,该数组引用viewDidLoad处的问答数组,与表中的单元格编号相同。然后在cellForRowAtIndexPath中,访问该数组中的数字,并将单元格配置为显示该问题。

这样你就有了不变的问题!

代码有点混乱,但本质上,我们希望将问题生成逻辑移动到viewDidLoad中,创建一个数组来保存这些东西,然后从cellForRowAtIndexPath中读取。

- (void)viewDidLoad {
  // GENERATING RANDOM QUESTIONS
  firstNumbers = [NSMutableArray array];
  lastNumbers = [NSMutableArray array];
  for (int i = 0; i < [tv numberOfRowsInSection:0]; i++) {
    int firstNumber, lastNumber;
    if ([mathCat isEqualToString:@"Easy"]) {
      firstNumber = [self getRandomNumberBetween:1 to:9];
      lastNumber = [self getRandomNumberBetween:1 to:9];
      // NSLog(@"firstNumber %d lastnumber %d",firstNumber,lastNumber);
    }
    else if ([mathCat isEqualToString:@"Medium"]){
      firstNumber = [self getRandomNumberBetween:10 to:99];
      lastNumber = [self getRandomNumberBetween:10 to:99];
      // NSLog(@"firstNumber %d lastnumber %d",firstNumber,lastNumber);
    }
    else if ([mathCat isEqualToString:@"Hard"]){
      firstNumber = [self getRandomNumberBetween:100 to:999];
      lastNumber = [self getRandomNumberBetween:100 to:999];
      // NSLog(@"firstNumber %d lastnumber %d",firstNumber,lastNumber);
    }
    [firstNumbers addObject:[NSNumber numberWithInt:firstNumber]];
    [lastNumbers addObject:[NSNumber numberWithInt:lastNumber]];
  }
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  NSString *cellIdent = @"mycal";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdent];
  yes=(UIButton *)[cell viewWithTag:1];
  no=(UIButton *)[cell viewWithTag:2];
  int firstNumber= [firstNumbers[indexPath.row] intValue];
  int lastNumber = [lastNumbers[indexPath.row] intValue];
  int calculation, ans=0;
  int todisplay= [self getRandomNumberBetween:0 to:1];
  NSLog(@"to display:::%d",todisplay);
  if(finalanswers==nil) {
    finalanswers=[[NSMutableArray alloc]init];
  }
  [finalanswers addObject:[NSNumber numberWithInt:todisplay]];
  NSLog(@"finalanswers::::%@",finalanswers);
  calculation=[self getRandomNumberBetween:0 to:3];
  NSLog(@"cat value %@",mathCat);

  // NSLog(@"calc value is -->  %@",[mathcal objectAtIndex:calculation]);
  // REMOVED GENERATION TO VIEW DID LOAD
  //cell.textLabel.text = [NSString stringWithFormat: @"%d+%d=%d",firstNumber,lastNumber,todisplay];
  if (todisplay==0) {
    if (calculation==0) {
      ans=firstNumber+lastNumber;
      answer=[NSString stringWithFormat:@"%d + %d=%d",firstNumber,lastNumber,ans];
      cell.textLabel.text=answer;
      return cell;
    }
    else if (calculation==1){
      ans=firstNumber-lastNumber;
      answer=[NSString stringWithFormat:@"%d - %d=%d",firstNumber,lastNumber,ans];
      cell.textLabel.text=answer;
      return cell;
    }
    else if (calculation==2){
      ans=firstNumber*lastNumber;
      answer=[NSString stringWithFormat:@"%d * %d=%d",firstNumber,lastNumber,ans];
      cell.textLabel.text=answer;
      return cell;
    }
    else if (calculation==3){
      ans=firstNumber/lastNumber;
      answer=[NSString stringWithFormat:@"%d / %d=%d",firstNumber,lastNumber,ans];
      cell.textLabel.text=answer;
      return cell;
    }
  }
  else if (todisplay==1){
    int ans=[self getRandomNumberBetween:10 to:50];
    answer=[NSString stringWithFormat:@"%d+%d=%d",firstNumber,lastNumber,ans];
    cell.textLabel.text=answer;
    return cell;
  }
  return cell;
}
-(int)getRandomNumberBetween:(int)from to:(int)to {
  return (int)from + arc4random() % (to-from+1);
}

注意,我在标头中将firstNumberslastNumbers声明为NSMutableArray,并假设您有一个对tableView的引用,名为tv。最后,我假设您的表中只有一个部分。希望这能有所帮助!

最新更新