【问题标题】:Insert element at NSMutableArray's end在 NSMutableArray 的末尾插入元素
【发布时间】:2013-04-16 10:26:31
【问题描述】:

我正在从 Web 服务加载一个数组并将它们显示在选择器中,一切正常。我的数组包含每个问题类别的随机问题。现在我想要的是我想在数组末尾再添加一个条目“您自己的问题”,以便选择器的最后一行显示“您自己的问题”。我该怎么做呢

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    UILabel *retval = (id)view;
    if (!retval) {
        retval= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)];
    }

   // retval.text = [idAndNameArray objectAtIndex:row];
    if([pickerType isEqualToString:@"picker"])
    {
        retval.text = [idAndNameArray objectAtIndex:row];
    }
    else
    {
        retval.text = [quesArray objectAtIndex:row];
    }
    retval.font = [UIFont boldSystemFontOfSize:14];
    retval.numberOfLines = 3;
    return retval;
}

此代码仅显示从 Web 服务获取的行数(问题)。

编辑 1:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView
{

    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component
{
    if([pickerType isEqualToString:@"picker"])
    {
        return [idAndNameArray count];
    }
    else
    {
       return [quesArray count];
    }

}

编辑 2:

通过使用我的自定义对象“您自己的问题”创建另一个 NSMutableArray,然后使用从 Web 服务获取的数组附加它来解决

NSMutableArray *customObj = [NSMutableArray arrayWithObject: @"test"];
 [quesArray addObjectsFromArray:customObj];

【问题讨论】:

    标签: ios objective-c xcode nsmutablearray uipickerview


    【解决方案1】:

    UIPickerViewDataSource 的名为pickerView:numberOfRowsInComponent: 的方法中,返回数组的计数加一个值(return arr.count+1;),在您已实现的UIPickerVIewDelegate 方法中,当component 时返回带有文本的标签大于arr.count-1 (if(row>(arr-1)){//return the label with 'Your own question'})。祝你好运!

    编辑:

    - (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component
    {
        if([pickerType isEqualToString:@"picker"])
        {
            return [idAndNameArray count];
        }
        else
        {
           return [quesArray count]+1;
        }
    
    }
    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
        UILabel *retval = (id)view;
        if (!retval) {
            retval= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)];
        }
    
       // retval.text = [idAndNameArray objectAtIndex:row];
        if([pickerType isEqualToString:@"picker"])
        {
            retval.text = [idAndNameArray objectAtIndex:row];
        }
        else
        {
           if(row>quesArray.count-1){
             retval.text = @"You own question";
           }
           else{
                retval.text = [quesArray objectAtIndex:row];
             }
            }
            retval.font = [UIFont boldSystemFontOfSize:14];
            retval.numberOfLines = 3;
            return retval;
        }
    

    【讨论】:

    • 但我只需要在选择器中有一个组件
    • 这就是你的意思.. if([quesArray count] - 1 > quesPicker.numberOfComponents)....?
    • 是的,有点,你能提供你的pickerView:numberOfRowsInComponent:numberOfComponentsInPickerView: 的代码,以便我能正确理解你吗?
    • crash..-[__NSArrayM objectAtIndex:]:空数组的索引 0 超出范围
    • 在你使用数组的任何地方,你都必须检查数组是否有你传递给它的索引下的对象。
    猜你喜欢
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 2011-11-14
    • 1970-01-01
    相关资源
    最近更新 更多