2010-01-26 39 views
1

我做了一个应用程序,它具有从相机捕获图像和点击按钮的按钮,pickerView将通过操作表显示并选择图像类型(jpg,png,bmp ..),一旦选择从选择器,按钮标题将根据pickerView结果改变,uItableviewcell动态检索值

然后我尝试将此转换为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功能

感谢

+1

请编辑您的帖子把代码中的代码标记,使我们可以更容易地阅读它。 – 2010-01-26 06:53:26

回答

1

你的概率变lem是表不知道它需要更新已经可见的单元格。对于快速解决方案,只需在用户选择图像/图像类型后添加[tableView reloadData],这将导致表格重新创建单元格并从中获取更新的数据。

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

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]; 
0

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

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];