iOS UITableView - UISlider только в заголовке раздела сбрасывается при прокрутке - PullRequest
0 голосов
/ 30 июня 2011

У меня есть UISlider в заголовке раздела. Сдвиг ползунка изменит текущую ячейку таблицы как своего рода механизм «скоростной прокрутки».

Это прекрасно работает, НО, когда он попадает на элемент в середине экрана (элемент № 7), происходит сбой (я полагаю, когда он перецентрирует выбранный элемент списка) и вызывает сброс UISlider к минимуму ,

Вот соответствующий код в контроллере вида:

//
//  ChapterSelectionView.m
//  TestApp
//
//  Created by Darren Ehlers on 6/2/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import "ChapterSelectionView.h"
#import "ContentView.h"

@implementation ChapterSelectionView

@synthesize initSection;
@synthesize initRow;
@synthesize Book;
@synthesize Chapter;

@synthesize backButton;
@synthesize contentView;
@synthesize chapterList;
@synthesize navBar;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
    {
        // Custom initialization
    }
    return self;
}

- (void)dealloc
{
    [slider release];

    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn"t have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren"t in use.
}

- (void) updateLabel:(id)sender
{
    NSLog(@"slider.value=%f (%d)", slider.value, (int)(slider.value + 0.5));
    self.Chapter       = (int)(slider.value + 0.5);
    navBar.topItem.title    = [NSString stringWithFormat:@"%@ %d", self.Book.name, self.Chapter];

    [chapterList selectRowAtIndexPath:[NSIndexPath indexPathForRow:(self.Chapter - 1) inSection:0] animated:YES scrollPosition:UITableViewScrollPositionMiddle];
}

-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.Book chapterCount];
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{
    CGRect  headerFrame = CGRectMake(0, 0, 320, 30);

    UIView *headerView = [[[UIView alloc] initWithFrame:headerFrame] autorelease];

    UILabel *headerLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 30, headerView.frame.size.height)];
    UILabel *headerLabel2 = [[UILabel alloc] initWithFrame:CGRectMake(headerView.frame.size.width - 30, 0, 30, headerView.frame.size.height)];

    CGRect  frame = CGRectMake(40, 0, 240, 30);

    slider = [[UISlider alloc] initWithFrame:frame];
    slider.minimumValue = 1.0;
    slider.maximumValue = [self.Book chapterCount];
    slider.continuous = YES;
    slider.value = self.Chapter;

    [slider addTarget:self
               action:@selector(updateLabel:)
     forControlEvents:UIControlEventValueChanged];

    [headerView addSubview: slider];

    headerView.backgroundColor    = [UIColor lightGrayColor];

    UIFont *helvetica   = [UIFont fontWithName:@"Helvetica-Bold" size:14];
    headerLabel1.font   = helvetica;
    headerLabel1.text   = @"1";
    headerLabel1.textColor      = [UIColor blackColor];
    headerLabel1.textAlignment  = UITextAlignmentRight;

    headerLabel1.opaque          = TRUE;
    headerLabel1.backgroundColor = [UIColor lightGrayColor];

    [headerView addSubview:headerLabel1];
    [headerLabel1 release];

    headerLabel2.font   = helvetica;
    headerLabel2.text   = [NSString stringWithFormat:@"%d", [self.Book chapterCount]];
    headerLabel2.textColor      = [UIColor blackColor];
    headerLabel2.textAlignment  = UITextAlignmentLeft;

    headerLabel2.opaque          = TRUE;
    headerLabel2.backgroundColor = [UIColor lightGrayColor];

    [headerView addSubview:headerLabel2];
    [headerLabel2 release];

    return headerView;
}

-(float)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{
    return 30.0;
}

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *myCellID   = @"MyCellIdentifier";

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

    cell.backgroundColor    = [UIColor whiteColor];

    UIFont *helvetica       = [UIFont fontWithName:@"Helvetica-Bold" size:14];
    cell.textLabel.font     = helvetica;
    cell.textLabel.text     = [NSString stringWithFormat:@"Chapter %d", indexPath.row + 1];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    [contentView changeCurrentChapter:(indexPath.row + 1)];

    [self.view removeFromSuperview];
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view from its nib.

    navBar.topItem.title    = [NSString stringWithFormat:@"%@ %d", self.Book.name, self.Chapter];
    chapterList.delegate    = self;

    [chapterList selectRowAtIndexPath:[NSIndexPath indexPathForRow:(self.Chapter - 1) inSection:0] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

Похоже, что "касание" на ползунке прекращается, когда табличное представление повторно выбирает выбранный элемент.

Есть мысли, обходные пути и т. Д.?

1 Ответ

0 голосов
/ 23 июля 2011

Потратив слишком много времени на это, я закончил тем, что запустил его на реальном устройстве.Работало нормально ... сбой НЕ произошел.

Это одна ошибка, которая возникает только на симулятореПоэтому теперь это не проблема.

...