我做了一个应用程序,它具有从摄像头捕获图像的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函数
更改单元格测试感谢
答案 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];