开发者

Weird behavior of iPhone tableview not occurring on iPad

开发者 https://www.devze.com 2023-03-30 04:30 出处:网络
I have build a grouped tableview with 2 sections. There always have to be 1 selection in each of the sections, and there can\'t be more.

I have build a grouped tableview with 2 sections.

There always have to be 1 selection in each of the sections, and there can't be more.

This is working rock steady when testing on the iPad.

I recently started developing the xib for the iPhone version.

Now things start getting weird. When scrolling the selections fly all over the place, disappears, and sometimes there are 4 selections in a section.

The exact same code is working flawlessly on the iPad.

Is there any known bugs that might make this occur?

UPDATED WITH CODE:

        - (void)viewDidLoad
    {


         [super viewDidLoad];
         self.view.backgroundColor = [UIColor whiteColor]; 

    //Initialize the array.
    listOfItems = [[NSMutableArray alloc] init];

    NSArray *countriesToLiveInArray = [NSArray arrayWithObjects:@"Baskerville", @"Palatino", @"Times New Roman", @"Verdana", nil];

    NSDictionary *countriesToLiveInDict = [NSDictionary dictionaryWithObject:countriesToLiveInArray forKey:@"Countries"];

    NSArray *countriesLivedInArray = [NSArray arrayWithObjects:@"My Text", @"My Text", @"My Text", @"My Text", @"My Text", @"My Text", @"My Text", @"My Text", @"My Text", @"My Text", @"My Text", @"My Text", nil];

    NSDictionary *countriesLivedInDict = [NSDictionary dictionaryWithObject:countriesLivedInArray forKey:@"Countries"];

    [listOfItems addObject:countriesToLiveInDict];
    [listOfItems addObject:countriesLivedInDict];

    //Set the title
    self.navigationItem.title = @"Countries";  

}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];    

     NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

    //SET Font 
    NSString *neverOpendFonts1 = [prefs objectForKey:@"neverOpendFonts1"];  

   开发者_如何学运维 if (![neverOpendFonts1 isEqualToString:@"1"]) {


            lastIndexPath1 = [NSIndexPath indexPathForRow:1 inSection:0];

            UITableViewCell *newCell = [myTableView cellForRowAtIndexPath:lastIndexPath1]; 

            newCell.accessoryType = UITableViewCellAccessoryCheckmark; 

            NSString *lastIndexPathString1 = [NSString stringWithFormat:@"1"];

            [prefs setObject:lastIndexPathString1 forKey:@"lastIndexPath1"];

            NSString *fontName = [NSString stringWithFormat:@"Palatino"];

            [prefs setObject:fontName forKey:@"fontName"];

            neverOpendFonts1 = [NSString stringWithFormat:@"1"];

            [prefs setObject:neverOpendFonts1 forKey:@"neverOpendFonts1"];

            [prefs synchronize];


    }

    else
    {
        NSInteger row = [[prefs objectForKey:@"lastIndexPath1"] intValue];

        lastIndexPath1 = [NSIndexPath indexPathForRow:row inSection:0];

        UITableViewCell *newCell = [myTableView cellForRowAtIndexPath:lastIndexPath1]; 

        newCell.accessoryType = UITableViewCellAccessoryCheckmark; 

    }

 //SET Font SIZE

    NSString *neverOpendFonts2 = [prefs objectForKey:@"neverOpendFonts2"];  

    if (![neverOpendFonts2 isEqualToString:@"1"]) {


        lastIndexPath2 =[NSIndexPath indexPathForRow:2 inSection:1];

        UITableViewCell *newCell = [myTableView cellForRowAtIndexPath:lastIndexPath2]; 

        newCell.accessoryType = UITableViewCellAccessoryCheckmark; 

        NSString *lastIndexPathString2 = [NSString stringWithFormat:@"2"];

        [prefs setObject:lastIndexPathString2 forKey:@"lastIndexPath2"];

        NSString *fontSize = [NSString stringWithFormat:@"24.0"];  

        [prefs setObject:fontSize forKey:@"fontSize"];

        neverOpendFonts2 = [NSString stringWithFormat:@"1"];

        [prefs setObject:neverOpendFonts2 forKey:@"neverOpendFonts2"];

        [prefs synchronize];

    }

    else
    {

        NSInteger row2 = [[prefs objectForKey:@"lastIndexPath2"] intValue];

        lastIndexPath2 = [NSIndexPath indexPathForRow:row2 inSection:1];

        UITableViewCell *newCell2 = [myTableView cellForRowAtIndexPath:lastIndexPath2]; 

        newCell2.accessoryType = UITableViewCellAccessoryCheckmark; 


    }

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    //Number of rows it should expect should be based on the section
    NSDictionary *dictionary = [listOfItems objectAtIndex:section];
    NSArray *array = [dictionary objectForKey:@"Countries"];
    return [array count];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return [listOfItems count];
}

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


    static NSString *CellIdentifier = @"Cell";

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

    // Set up the cell...

    //First get the dictionary object
    NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
    NSArray *array = [dictionary objectForKey:@"Countries"];
    NSString *cellValue = [array objectAtIndex:indexPath.row];
    cell.textLabel.text = cellValue;

    if (indexPath.section == 0)
    {
        switch (indexPath.row) {
            case 0:
            {
             cell.textLabel.font = [UIFont fontWithName:@"Baskerville" size:24];   
            }
                break;
            case 1:
            {
              cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:24];    
            }
                break;
            case 2:
            {
                cell.textLabel.font = [UIFont fontWithName:@"Times New Roman" size:24];  
            }
                break;
            case 3:
            {
               cell.textLabel.font = [UIFont fontWithName:@"Verdana" size:24];   
            }
                break;
        }

    }
    if (indexPath.section == 1) {

        switch (indexPath.row) {
            case 0:
            {
                cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:16];   
            }
                break;
            case 1:
            {
                cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:20];    
            }
                break;
            case 2:
            {
                cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:24];  
            }
                break;
            case 3:
            {
                cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:28];   
            }
                break;
            case 4:
            {
                cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:32];   
            }
                break;
            case 5:
            {
                cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:36];   
            }
                break;
            case 6:
            {
                cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:40];   
            }
                break;
            case 7:
            {
                cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:44];   
            }
                break;
            case 8:
            {
                cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:48];   
            }
                break;
            case 9:
            {
                cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:52];   
            }
                break;
            case 10:
            {
                cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:56];   
            }
                break;
            case 11:
            {
                cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:60];   
            }
                break;
        }


    }


    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
   // CGFloat result;

    if (indexPath.section == 0)
    {
        return 50;

    }
    if (indexPath.section == 1) {

        switch (indexPath.row) {
            case 0:
            {
                return 50;   
            }
                break;
            case 1:
            {
                return 50;    
            }
                break;
            case 2:
            {
                return 50;  
            }
                break;
            case 3:
            {
                return 50;   
            }
                break;
            case 4:
            {
                return 50;   
            }
                break;
            case 5:
            {
                return 50;   
            }
                break;
            case 6:
            {
                return 50;   
            }
                break;
            case 7:
            {
                return 54;   
            }
                break;
            case 8:
            {
                return 58;   
            }
                break;
            case 9:
            {
                return 62;
            }
                break;
            case 10:
            {
                return 66;
            }
                break;
            case 11:
            {
                return 70;  
            }
                break;
        }


    }
    return 50;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

    if (section == 0) {
        return @"Font";
    }
    if (section == 1) {
        return @"Font Size";
    }
    else if (!section == 0 || !section == 1) {
        return @"Text";
    }
}

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

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

    UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath]; 

    NSInteger newRow = [indexPath row];

    if (indexPath.section == 0) {

        NSString *fontName;

        switch (indexPath.row) {
            case 0:
            {
                fontName = [NSString stringWithFormat:@"Baskerville"];   

            }
                break;
            case 1:
            {
               fontName = [NSString stringWithFormat:@"Palatino"];    

            }
                break;
            case 2:
            {
               fontName = [NSString stringWithFormat:@"Times New Roman"];  

            }
                break;
            case 3:
            {
                fontName = [NSString stringWithFormat:@"Verdana"];  


            }
                break;
        }

        NSInteger oldRow = (lastIndexPath1 != nil) ? [lastIndexPath1 row] : -1; 

        if(newRow != oldRow) 
        { 
            newCell.accessoryType = UITableViewCellAccessoryCheckmark; 
            UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:lastIndexPath1]; 
            oldCell.accessoryType = UITableViewCellAccessoryNone;
            lastIndexPath1 = indexPath; 
        }   


        NSInteger lastRow = lastIndexPath1.row;

        NSString *lastIndexPathString = [NSString stringWithFormat:@"%i", lastRow];

        [prefs setObject:lastIndexPathString forKey:@"lastIndexPath1"];

        [prefs setObject:fontName forKey:@"fontName"];

        [prefs synchronize];

        [tableView deselectRowAtIndexPath:indexPath animated:YES];
    }

    if (indexPath.section == 1) {

        NSString *fontSize;

        switch (indexPath.row) {
            case 0:
            {
               // cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:16];  

                fontSize = [NSString stringWithFormat:@"16.0"];   

               // UITableViewCell *newCell =[tableView cellForRowAtIndexPath:indexPath];
               // newCell = [tableView  cellForRowAtIndexPath:indexPath];
               // newCell.accessoryType = UITableViewCellAccessoryCheckmark;

            }
                break;
            case 1:
            {
            fontSize = [NSString stringWithFormat:@"20.0"];   


            }
                break;
            case 2:
            {
            fontSize = [NSString stringWithFormat:@"24.0"];   


            }
                break;
            case 3:
            {
            fontSize = [NSString stringWithFormat:@"28.0"];   


            }
                break;
            case 4:
            {
            fontSize = [NSString stringWithFormat:@"32.0"];   


            }
                break;
            case 5:
            {
            fontSize = [NSString stringWithFormat:@"36.0"];   


            }
                break;
            case 6:
            {
            fontSize = [NSString stringWithFormat:@"40.0"];   


            }
                break;
            case 7:
            {
            fontSize = [NSString stringWithFormat:@"44.0"];   


            }
                break;
            case 8:
            {
            fontSize = [NSString stringWithFormat:@"48.0"];   


            }
                break;
            case 9:
            {
            fontSize = [NSString stringWithFormat:@"52.0"];   


            }
                break;
            case 10:
            {
            fontSize = [NSString stringWithFormat:@"56.0"];   


            }
                break;
            case 11:
            {
            fontSize = [NSString stringWithFormat:@"60.0"];   

            }
                break;
        }

        NSInteger oldRow = (lastIndexPath2 != nil) ? [lastIndexPath2 row] : -1; 

        if(newRow != oldRow) 
        { 
            newCell.accessoryType = UITableViewCellAccessoryCheckmark; 
            UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:lastIndexPath2]; 
            oldCell.accessoryType = UITableViewCellAccessoryNone;
            lastIndexPath2 = indexPath; 
        }   


        NSInteger lastRow2 = lastIndexPath2.row;

        NSString *lastIndexPathString2 = [NSString stringWithFormat:@"%i", lastRow2];

        [prefs setObject:lastIndexPathString2 forKey:@"lastIndexPath2"];

        //NSString *lastIndexPathString = [NSString stringWithFormat:@"@%", lastIndexPath2];

        //[prefs setObject:lastIndexPathString forKey:@"lastIndexPath2"];


        [prefs setObject:fontSize forKey:@"fontSize"];

        [prefs synchronize];

        [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    }



}


TSolved the problem... Got my answer on iphonedevsdk.com...

I added

if([self.lastIndexPath1 isEqual:indexPath]) { cell.accessoryType = UITableViewCellAccessoryCheckmark; } else { cell.accessoryType = UITableViewCellAccessoryNone; }

to the cellForRowAtIndexPath

and added

if(self.lastIndexPath1) { UITableViewCell* uncheckCell = [tableView cellForRowAtIndexPath:self.lastIndexPath1]; uncheckCell.accessoryType = UITableViewCellAccessoryNone; } UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; cell.accessoryType = UITableViewCellAccessoryCheckmark; self.lastIndexPath1 = indexPath; }

to didSelectRowAtIndexPath...

I removed the old `/*

    NSInteger oldRow = (lastIndexPath1 != nil) ? [lastIndexPath1 row] : -1; 

    if(newRow != oldRow) 
    { 
        newCell.accessoryType = UITableViewCellAccessoryCheckmark; 
        UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:lastIndexPath1]; 
        oldCell.accessoryType = UITableViewCellAccessoryNone;
        lastIndexPath1 = indexPath; 
    }   

           */`

from didSelectRow, and now everything works perfectly...

0

精彩评论

暂无评论...
验证码 换一张
取 消