实现循环 UITableView 的最佳方法是什么,当用户向上滚动到表格边界时,它不是显示空白,而是简单地循环环绕?这里的示例可能是选择星期几、一天 24 小时中的某个小时,或者全球范围内按顺序排序的时区。有一些如何解决这个问题的想法(可以说是从中间开始的 100x7 天的列表),但没有什么优雅的。
有人对此有什么想法或经验吗?
David
我已经多次看到这种行为,但不是在 UITableView 中,而是在 UIPickerView 中。代码非常简单,可能可以转换为 UITableView....
ciclic UIPickerView 的代码
RollerViewController.h
@interface RollerViewController : UIViewController <UIPickerViewDelegate>{
UIPickerView *picker;
}
@end
RollerViewController.m
#import "RollerViewController.h"
@implementation RollerViewController
#define MAX_ROLL 100
#define ROWS_COUNT 10
#pragma mark -
#pragma mark Helpers
- (void) infinitePickerViewDidSelectRow:(NSInteger)row inComponent:(NSInteger)component{
NSUInteger base10 = (MAX_ROLL/2) - (MAX_ROLL/2)%ROWS_COUNT;
[picker selectRow:row%ROWS_COUNT+base10 inComponent:component animated:FALSE];
}
#pragma mark -
#pragma mark UIPickerView dataSource delegate methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {
return 3;
}
- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component {
return MAX_ROLL;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
return (CGFloat)40;
}
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
[self infinitePickerViewDidSelectRow:row inComponent:component];
}
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
return (CGFloat) 50;
}
- (UIView *)pickerView:(UIPickerView *)thePickerView viewForRow:(NSInteger)row
forComponent:(NSInteger)component reusingView:(UIView *)rview {
UILabel *retval = (UILabel *)rview;
if (!retval) {
retval= [[[UILabel alloc] initWithFrame:CGRectMake(5,5,40,30) ] autorelease];
}
retval.text = [NSString stringWithFormat:@"%d", row%ROWS_COUNT];
retval.font = [UIFont systemFontOfSize:25];
retval.textAlignment = UITextAlignmentCenter;
retval.backgroundColor = [UIColor clearColor];
return retval;
}
#pragma mark overides
- (void)viewDidLoad {
[super viewDidLoad];
picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320, 280)];
picker.delegate = self;
[self.view addSubview:picker];
}
- (void) viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[self infinitePickerViewDidSelectRow:arc4random()%MAX_ROLL inComponent:0];
[self infinitePickerViewDidSelectRow:arc4random()%MAX_ROLL inComponent:1];
[self infinitePickerViewDidSelectRow:arc4random()%MAX_ROLL inComponent:2];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)dealloc {
[picker release];
[super dealloc];
}
@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)