如何使用pickerView和actionsheet向tableView添加行

时间:2011-06-29 17:43:40

标签: iphone uitableview uipickerview uiactionsheet

任何想法?一些示例代码或一些建议将受到欢迎...... thx

// add bank to tableView
-(void)addBankFromList {

    if (notInList == nil) {

        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Could not be added" message:@"Bank already in list" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil, nil];

        [alert show];
        [alert release];

    }

    else {

//       [banksTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[banks count] inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];
//        [banksTableView reloadData];
    }
}

// call addBankFromList method when button Add to List is touched .
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

    [self addBankFromList];
}

#pragma mark UIPicker Delegate and DataSource methods
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

    for (NSString *temp in banksNotInList) 
        if (temp == [arrayWithBanks objectAtIndex:row]) {

            notInList = [[NSMutableString alloc]initWithString:temp];


            NSLog(@"%@",temp);
        }
        else notInList = nil;
}

已解决(阅读第一条评论)

[appDelegate.banks insertObject:notInList atIndex:[appDelegate.banks count]];
        [banksTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[banks count] inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];

        [banksTableView reloadData];

1 个答案:

答案 0 :(得分:0)

看起来你有正确的想法。从逻辑上讲,您需要检查表中是否已存在该对象(您已在进行此操作)。然后,如果它不在,你将插入它。如果您对udpating tableViews不太熟悉,那就会出现问题。你上面做的是正确的开始。您希望创建一个您想要插入新对象的indexPath,但在实际插入新行之前,您需要执行几个步骤。您必须使numberOfRowsInSection与更新的数字匹配,因此如果要从数组中绘制该返回,则需要更新阵列。因此,假设您有banks作为您正在显示tableView单元格的数组,您可以将新对象插入到其相应位置的数组中,然后调用insertRowsAtIndexPaths:withRowAnimation:。这样,当tableView调用其dataSource方法时,它不会产生冲突的结果。简而言之,您更新数据数组,然后更新tableView。我希望一切都有意义