【问题标题】:Setting UIPickerView from NSArray Object从 NSArray 对象设置 UIPickerView
【发布时间】: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;
}

【问题讨论】:

    标签: ios ios7 uipickerview


    【解决方案1】:

    您的代码没有任何问题,因此不得不推断您的模型对象可能有问题,即您的 _weeks 数组实际上并没有按照您认为的方式正确填充 - @987654322 @ 显然缺少某些 Week 对象。你可能应该回去看看你是如何生成这个数组的。

    【讨论】:

    • 第一次调用行标题时,我只记录了 weekDateString 的所有值,它显示了所有字符串。然后,当我滚动过去显示的 5 个时,它会给我(空)那些不显示的。
    • 好吧,@bryc3krispies,您需要查看所有代码。听起来您还有其他代码 - 您没有在问题中显示的代码 - 正在破坏您的 _weeks 数组。
    • 例如,您可能在实现 pickerView:didSelectRow:inComponent: 时犯了一些错误,从而破坏了 _weeks。我不知道,因为无论问题是什么,它都存在于您没有向我展示的代码中。
    • 我添加了其余代码,我没有调用 pickerView:didSelectRow 提前感谢您的帮助。
    • 这是一个愚蠢的问题。这是因为 WeekDateString 在类 Week 中设置为 weak。我想这就是当你刚接触 iOS 时会发生的事情。所以你是对的,问题出在模型对象中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 2013-12-04
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多