从 NSArray 对象设置 UIPickerView
Posted
技术标签:
【中文标题】从 NSArray 对象设置 UIPickerView【英文标题】:Setting UIPickerView from NSArray Object 【发布时间】:2014-03-26 01:47:54 【问题描述】:我正在尝试使用最近 20 个星期一的日期设置 UIPicker 视图。该数组填充了 20 个周对象。例如 NSDate *weekDate=3/24/2014 NSString *weekDateString=Week of 3/24/2014。
当我最初设置行时,它会正确显示前 5-6 行,当我尝试滚动选择器时,它会尝试为其显示的新行设置标题,但 setTitle 正在为 weekDateString 记录(null) .当我在 titleForRow 中记录计数时,列表仍显示计数为 20。
如果我将 NSArray 设置为 NSString 就没有问题。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
// Custom initialization
_weeks = [Week getWeeks];
return self;
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
self.title=@"Weeks";
[self.navigationController.navigationBar.layer insertSublayer:[LayoutColors getNavBarGradient:self.navigationController.navigationBar.bounds] atIndex:1];
self.navigationController.navigationBar.titleTextAttributes
= @NSForegroundColorAttributeName : [UIColor whiteColor];
int startYValue = self.navigationController.navigationBar.frame.size.height + HeaderHeight;
int width = self.view.frame.size.width;
_picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, startYValue, width/2, DATE_PICKER_HEIGHT)];
_picker.delegate = self;
_picker.dataSource = self;
[self.view addSubview:self.picker];
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
//One column
return 1;
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
//set number of rows
return _weeks.count;
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
Week *week = [_weeks objectAtIndex:row];
return week.weekDateString;
【问题讨论】:
【参考方案1】:您的代码没有任何问题,因此不得不推断您的模型对象可能有问题,即您的 _weeks
数组实际上并没有按照您认为的方式正确填充 - @987654322 @ 显然缺少某些 Week 对象。你可能应该回去看看你是如何生成这个数组的。
【讨论】:
第一次调用行标题时,我只记录了 weekDateString 的所有值,它显示了所有字符串。然后,当我滚动过去显示的 5 个时,它会给我(空)那些不显示的。 好吧,@bryc3krispies,您需要查看所有代码。听起来您还有其他代码 - 您没有在问题中显示的代码 - 正在破坏您的_weeks
数组。
例如,您可能在实现 pickerView:didSelectRow:inComponent:
时犯了一些错误,从而破坏了 _weeks
。我不知道,因为无论问题是什么,它都存在于您没有向我展示的代码中。
我添加了其余代码,我没有调用 pickerView:didSelectRow 提前感谢您的帮助。
这是一个愚蠢的问题。这是因为 WeekDateString 在类 Week 中设置为 weak。我想这就是当你刚接触 ios 时会发生的事情。所以你是对的,问题出在模型对象中。以上是关于从 NSArray 对象设置 UIPickerView的主要内容,如果未能解决你的问题,请参考以下文章