2011-06-30 45 views
0

我在部分標題中有一個UISlider。作爲一種「速度滾動」機制,滑動滑塊將改變當前表格單元格。iOS UITableView - 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 

看來,當表視圖recenters所選項目滾動條上的「觸摸」被停止。

任何想法,解決方法等?

+0

它肯定與當前項目導致列表第一次滾動時有關。當使用UITableViewScrollPositionMiddle時,當新的當前項目命中#7時發生。當使用UITableViewScrollPositionTop時,它幾乎立即發生;當使用UITableViewScrollPositionBottom時,會發生相反的情況。 –

回答

0

在這個花費太長時間後,我結束了在實際設備上運行它。它工作得很好......呃逆沒有發生。

這是一個只發生在模擬器上的bug。因此,它現在是一個非問題。

相關問題