uItableviewcell动态检索值

时间:2010-01-26 06:44:32

标签: iphone uitableview

我做了一个应用程序,它具有从摄像头捕获图像的imageview和一个单击按钮的按钮,pickerView将按动作表显示,并将选择图像类型(jpg,png,bmp ..),一旦从选择器中选择,按钮标题将根据pickerView结果进行更改

然后我尝试将其转换为UITableView,它有2个部分(1个用于图像,1个用于选择图像的类型,

现在我遇到问题,我尝试将imageView放入单元格,但图像与其他单元格重叠,一旦从相机捕获图像,即imageView未更新但只滚动表格而不是仅更新,

另一个问题是,一旦选择第二部分我能够调用pickerView来选择之前的图像类型,但是一旦从pickerView中选择我不知道如何更新cell.text

下面是我的代码,任何人都可以帮助或改进它,

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

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

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    switch (section) {
        case 0:
            return NSLocalizedString(@"Image", @"");
            break;
        case 1:
            return NSLocalizedString(@"Image type", @"");
            break;
        default:
            break;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"] autorelease];
    }

    switch (indexPath.section) {
        case 0:
        {
            UIImageView *abc = [[UIImageView alloc] initWithFrame:CGRectMake(5,5,100,100)];
            abc.image = imageView.image;
            [cell addSubview:abc];
        }
            break;
        case 1:
            cell.textLabel.text = @"- Click here -";
            break;
        default:
            break;
    }
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"Cell"] autorelease];
    }

    if(indexPath.section == 0) {
        NSLog(@"selected %d",indexPath.section);
    }
    if(indexPath.section == 1) {
        NSLog(@"selected %d",indexPath.section);
        [self chooseType];
    }
}

- (void)chooseType{
    actionSheet = [[UIActionSheet alloc] initWithTitle:@""
                                              delegate:self
                                     cancelButtonTitle:nil
                                destructiveButtonTitle:nil
                                     otherButtonTitles:nil];

    NSArray *typeObject = [NSArray arrayWithObjects:@".jpg",@".png",@".bmp",nil];

    self.pickerData = typeObject;

    pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 44.0, 0.0, 0.0)];
    pickerView.delegate = self;
    pickerView.showsSelectionIndicator = YES;

    pickerDateToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    pickerDateToolbar.barStyle = UIBarStyleBlackOpaque;
    [pickerDateToolbar sizeToFit];

    NSMutableArray *barItems = [[NSMutableArray alloc] init];

    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
    [barItems addObject:flexSpace];
    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(TypeDonePick)];
    [barItems addObject:doneBtn];

    [pickerDateToolbar setItems:barItems animated:YES];

    [actionSheet addSubview:pickerDateToolbar];
    [actionSheet addSubview:pickerView];
    [actionSheet showInView:self.view];
    [actionSheet setBounds:CGRectMake(0,0,320, 464)];
    [pickerView release];
    [actionSheet release];  
}


- (void)TypeDonePick
{
    NSInteger row = [pickerView selectedRowInComponent:0];
    titleCause.textColor = [UIColor blackColor];
    titleCause.text = [pickerData objectAtIndex:row];
    NSLog(@" %@ ",titleCause.text);
    [actionSheet dismissWithClickedButtonIndex:0 animated:YES];
}

是否可以从外部范围UITable函数

更改单元格测试

感谢

2 个答案:

答案 0 :(得分:1)

您的问题是该表不知道它需要更新已经可见的单元格。为了快速解决方案,只需在用户选择图像/图像类型后添加[tableView reloadData],这将使表格重新创建单元格并从中获取更新的数据。

如果要单独更新单元格,可以使用[tableView cellForRowAtIndexPath:]获取要更新的单元格。 e.g。

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];
    cell.textLabel.text = @"updated text";
    // You might need to call the following function though I'm not sure
    // [cell.textLabel setNeedsDisplay];

如果你想更新图像我建议你在单元格中的imageView中添加一个标签,然后你就可以按如下方式更改它:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
UIImageView *imageView = [cell viewWithTag:kImageViewTag];
imageView.image = updatedImage;
// Again you might need to tell the image to refresh it self
//[imageView setNeedsDisplay];

答案 1 :(得分:0)

要在IndexPath处更改UITableViewCell的LabelText,我们可以使用下面的代码。 - >它工作正常! (在这个例子中,我在tableView的第0行更改了labelText):

   UITableViewCell *cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
   cell.textLabel.text = @"updated text";
   // must to write line below to update labelText for row 0
   [tableView setNeedsDisplay];