在iOS7 +中使用多个UIPickerViews

时间:2014-03-26 23:14:39

标签: ios objective-c uitableview uipickerview

我的目标是在屏幕上有三个不隐藏的选择视图。用户使用它们然后单击UIButton,UIButton又将pickerview标题中的三个标题添加到UITableView Cell。

我无法让我的生活得以实现。下面的代码就是我现在玩了大约2到3个小时......任何人都可以帮我弄清楚它为什么不起作用?

特别是我的错误,当我点击添加按钮时,没有任何内容添加到tableview。

//UITABLEVIEW DELEGATE METHODS
#pragma mark Tableview methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == workaddedTable)
{
    return [tableviewArray count];
}
else
{
    //INSERT CODE HERE FOR SECOND TABLEVIEW AND ERASE THE FOLLOWING LINE
    return 2;
}
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

if(tableView.tag == 0)
{
    static NSString *CellIdentifier = @"workCell";
    WorkPerformedCell *cell = (WorkPerformedCell *)[workaddedTable dequeueReusableCellWithIdentifier:CellIdentifier];
    cell = [workaddedTable dequeueReusableCellWithIdentifier:CellIdentifier];

    workPerformedObject *tempOrder = [tableviewArray objectAtIndex:indexPath.row];
    cell.inputSystem.text = tempOrder.systemAdded;
    cell.inputsubsystem.text = tempOrder.subsystemAdded;
    cell.inputProcedure.text = tempOrder.procedureAdded;

    return cell;
}
else
{
    //DELETE THE FOLLOWING THREE LINES, DEFINE CELL REUSE IDENTIFIER IN STORYBOARD, CREATE A CUSTOM CELL CLASS AND DESIGN IT IN STORYBOARD, ADD LABELS IN CUSTOM CELL IN STORYBOARD BUT DEFINE THEM IN YOUR CELL CLASS, CREATE AN NSMUTABLEARRAY AND A CUSTOM OBJECT CLASS TO HOLD SO YOU CAN REFRESH DATA AND UPDATE LABELS
    static NSString *CellIdentifier = @"workCell";
    WorkPerformedCell *cell = (WorkPerformedCell *)[workaddedTable dequeueReusableCellWithIdentifier:CellIdentifier];
    cell = [workaddedTable dequeueReusableCellWithIdentifier:CellIdentifier];
    return cell;
}
}


    //PICKERVIEW DELEGATE METHODS
#pragma mark Pickerview methods
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    //One column
    return 1;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    //set number of rows
    if (pickerView == _systemPicker)
    {
        return systemArray.count;
    }
    else if (pickerView == _subsystemPicker)
    {
    return subsystemArray.count;
    }
    else
    {
        return procedureArray.count;
    }
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    //set item per row
    //set number of rows
    if (pickerView == _systemPicker)
    {
        return [systemArray objectAtIndex:row];
    }
    else if (pickerView == _subsystemPicker)
    {
        return [subsystemArray objectAtIndex:row];
    }
    else
    {
        return [procedureArray objectAtIndex:row];
    }
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if(pickerView == _systemPicker)
    {
        systemAdded = [systemArray objectAtIndex:row];
    }
    else if(pickerView == _subsystemPicker)
    {
        subsystemAdded = [subsystemArray objectAtIndex:row];
    }
    else
    {
        procedureAdded = [procedureArray objectAtIndex:row];
    }
}  

//BUTTON METHODS FOR BLOCK 3
- (IBAction)buttonPressed:(id)sender
{
    _tempworkPerformedObject.systemAdded = [self pickerView:self.systemPicker titleForRow:1 forComponent:0];;
    _tempworkPerformedObject.subsystemAdded = [self pickerView:self.subsystemPicker titleForRow:1 forComponent:0];;
    _tempworkPerformedObject.procedureAdded = [self pickerView:self.procedurePicker titleForRow:1 forComponent:0];;
    [tableviewArray addObject:_tempworkPerformedObject];

    [self refreshData];
}

-(void) refreshData
{
    [workaddedTable reloadData];
}

1 个答案:

答案 0 :(得分:0)

_tempworkPerformedObject中的buttonPressed外,所有内容都按顺序查看。

此对象在何处实例化?你能提供那些代码吗?

您似乎正在重复使用同一个对象并更改其属性以添加到数组中。如果是这种情况,这将最终改变数组中每个元素的那些属性(因为它们都指向相同的对象)

为了使其正常工作,您需要在buttonPressed:中创建一个新对象并将其添加到数组中。

相关问题