【发布时间】:2012-12-21 10:06:33
【问题描述】:
我有自定义表格视图单元格,其中我有两个 UIButton 和一个名为编辑和取消的文本字段以及一个文本字段。当我同时单击编辑时,TextFeild 交互已启用并且取消按钮图像应该更改。它对我来说很好用!!
但是当我单击编辑按钮时,另一个单元格取消 bitton 图像 id 自动更改!我知道发生这种情况是因为我正在重复使用电池!但我无法找到解决方案...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
simpleTableIdentifier = @"MenuNameCell";
cell = (MenuNameCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (!cell) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MenuNameCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
NSLog(@"---------new cell agin");
}
else
{
for (UIView *view in [cell.contentView subviews])
[view removeFromSuperview];
NSLog(@"---------older use");
// _checkButton = (UIButton *)[cell.contentView viewWithTag:indexPath.row];
// _cancelButton = (UIButton *)[cell.contentView viewWithTag:indexPath.row];
}
// Creating Label Menu Name
_nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(8, 11, 82, 21)];
_nameLabel.backgroundColor = [UIColor clearColor];
_nameLabel.text = [_hotel._orderedMenus objectAtIndex:indexPath.row];
// Creating Label Menu Cost
_amountMenu = [[UILabel alloc] initWithFrame:CGRectMake(167, 13, 44, 21)];
_amountMenu.backgroundColor = [UIColor clearColor];
_amountMenu.text = [[_hotel._menuPrices objectAtIndex:indexPath.row] stringValue];
// Creating Text Field For Order Quantity
_textFieldQuantity = [[UITextField alloc] initWithFrame:CGRectMake(125,14,42,21)];
_textFieldQuantity.userInteractionEnabled = NO;
_textFieldQuantity.text = [[_hotel._selectedQuantity objectAtIndex:indexPath.row] stringValue];
// Creating Button For Check Order
_checkButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_checkButton setFrame:CGRectMake(232, 13, 25, 28)];
[_checkButton setBackgroundImage:[UIImage imageNamed:@"edit.png"]forState:UIControlStateNormal];
[_checkButton addTarget:self action:@selector(editQuantity:) forControlEvents:UIControlEventTouchUpInside];
[_checkButton setTag:indexPath.row];
// Creating Button For CANCEL Order
_cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_cancelButton setFrame:CGRectMake(265, 13, 25, 28)];
[_cancelButton setBackgroundImage:[UIImage imageNamed:@"cancel.png"] forState:UIControlStateNormal];
[_cancelButton addTarget:self action:@selector(cancelOreder:) forControlEvents:UIControlEventTouchUpInside];
[_cancelButton setTag:indexPath.row];
// Adding All To Call Content View
[cell.contentView addSubview:_nameLabel];
[cell.contentView addSubview:_amountMenu];
[cell.contentView addSubview:_textFieldQuantity];
[cell.contentView addSubview:_checkButton];
[cell.contentView addSubview:_cancelButton];
return cell;
}
编辑:
-(void)editQuantity:(id)sender
{
_textFieldQuantity.userInteractionEnabled = YES;
button = (UIButton *)sender;
row = button.tag;
NSLog(@"Check Button index is %d",row);
UIImage *buttonImage = [UIImage imageNamed:@"edit_over.png"];
[_checkButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
UIImage *buttonImageCancel = [UIImage imageNamed:@"check.png"];
[_cancelButton setBackgroundImage:buttonImageCancel forState:UIControlStateNormal];
_cancelButton.tag = 0;
}
-(void)cancelOreder:(id)sender{
button = (UIButton *)sender;
row = button.tag;
NSLog(@"The Row Selected iS At Cancel Order ISSSS----%d", row);
if (_cancelButton.tag == 0){
_textFieldQuantity.userInteractionEnabled = NO;
UIImage *buttonImageCancel = [UIImage imageNamed:@"check_over.png"];
[_cancelButton setBackgroundImage:buttonImageCancel forState:UIControlStateNormal];
UIImage *buttonImageCancel1 = [UIImage imageNamed:@"cancel.png"];
[_cancelButton setBackgroundImage:buttonImageCancel1 forState:UIControlStateNormal];
UIImage *buttonImage = [UIImage imageNamed:@"edit.png"];
[_checkButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
_cancelButton.tag = 1;
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"iHomeDelivery" message:@"Do You Want To Cancel the Order" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
【问题讨论】:
-
嗯...,当重用单元格时,您会删除它们的所有子视图,并且无论如何您都会从头开始创建新的子视图。那应该可以正常工作。我更愿意猜测错误出在您的行为之内。请提供 editQuantity: 和 cancelOreder: (这里是错字?) 方法的 ode。
-
-(void)editQuantity:(id)sender{ _textFieldQuantity.userInteractionEnabled = YES;按钮 = (UIButton *) 发送者;行 = button.tag; NSLog(@"检查按钮索引为 %d",row); UIImage *buttonImage = [UIImage imageNamed:@"edit_over.png"]; [_checkButton setBackgroundImage:buttonImage forState:UIControlStateNormal]; UIImage *buttonImageCancel = [UIImage imageNamed:@"check.png"]; [_cancelButton setBackgroundImage:buttonImageCancel forState:UIControlStateNormal]; _cancelButton.tag = 0; }
-
-(void)cancelOreder:(id)sender{ button = (UIButton *)sender;行 = button.tag; NSLog(@"取消订单时选择的行ISSSS----%d", row); if (_cancelButton.tag == 0){ _textFieldQuantity.userInteractionEnabled = NO; UIImage *buttonImageCancel = [UIImage imageNamed:@"check_over.png"]; [_cancelButton setBackgroundImage:buttonImageCancel forState:UIControlStateNormal]; UIImage *buttonImageCancel1 = [UIImage imageNamed:@"cancel.png"]; _cancelButton.tag = 1; }
-
我会将其添加到您的问题中并正确格式化。
-
显然 cancelOreder: 不完整。请通过编辑您的问题来解决此问题。
标签: objective-c ios5 uitableview