У меня есть 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
Похоже, что "касание" на ползунке прекращается, когда табличное представление повторно выбирает выбранный элемент.
Есть мысли, обходные пути и т. Д.?