Я хочу что-то вроде изображения ниже. Пользователь может нажать кнопку + или - и увеличенное или уменьшенное количество отображается в UILabel i.e 1 на изображении ниже.
Я знаю, как реализовать пользовательскую ячейку представления таблицы. Я также знаю, как реализовать селектор. но мне нужно установить текст ярлыка в соответствии с нажатой кнопкой, вот только проблема. кнопку Как я могу обновить щелкнули и набора текст UILabel заказной клетку вне от cellForRowAtIndexPathwith особенностей добавить вычитать.Доступ к пользовательским атрибутам ячеек вне cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
static NSString *simpleTableIdentifier = @"ProductListVIICell";
ProductListVIICell *cell = (ProductListVIICell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ProductListVIICell" owner:self options:nil];
cell = [nib objectAtIndex:0];
} ....................................
cell.btnMinus.tag = indexPath.row;
cell.btnPlus.tag = indexPath.row;
[cell.btnPlus addTarget:self action:@selector(addItem:) forControlEvents:UIControlEventTouchUpInside];
[cell.btnMinus addTarget:self action:@selector(deleteItem:) forControlEvents:UIControlEventTouchUpInside];
cell.lblCount.tag = [[NSString stringWithFormat:@"%d%d",addBtnClickCount,addBtnClickCount] integerValue];
return cell;
}
Мне нужно сделать что-то здесь, но не получило то, что я хочу достичь. cell.lblTitle.text
разве работает
#pragma mark - UIButton selector
-(void)addItem:(UIButton*)button {
itemCount++;
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:button.tag inSection:1];
ProductListVIICell *cell = (ProductListVIICell *)[self.tableView cellForRowAtIndexPath:indexPath];
cell.lblCount.textColor = [UIColor redColor];
cell.lblTitle.text = [NSString stringWithFormat:@"%d",itemCount];
NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:[button tag] inSection:0];
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[self.tableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
NSLog(@"%d",itemCount);
[self.tableView reloadData];
}
-(void)deleteItem:(UIButton*)button {
itemCount--;
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:button.tag inSection:1];
ProductListVIICell *cell = (ProductListVIICell *)[self.tableView cellForRowAtIndexPath:indexPath];
cell.lblCount.textColor = [UIColor redColor];
cell.lblTitle.text = [NSString stringWithFormat:@"%d",itemCount];
NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:[button tag] inSection:0];
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[self.tableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
NSLog(@"%d",itemCount);
[self.tableView reloadData];
}
Эти ссылки могут быть использованы слишком
Accessing cell attributes outside of cellForRowAtIndexPath
http://code.tutsplus.com/tutorials/blocks-and-table-view-cells-on-ios--mobile-22982 , но это только для UITableViewCell не пользовательской ячейке
я был в состоянии решить мою проблему с помощью следующего
@interface ProductListVC()
{
int count;
bool addBtnClicked;
bool minusBtnClicked;
}
@property (strong,nonatomic) NSMutableArray* quantityArray; //stores label
@property (strong,nonatomic) NSMutableArray* quantityLabelArray; //stores label
- (void)viewDidLoad {
[super viewDidLoad];
_quantityLabelArray = [[NSMutableArray alloc] init];
_quantityArray = [[NSMutableArray alloc] init];
//determine num of row prevent index 2 beyond bounds for empty array error i.e insert straight to let's say index 3
for (int i=0; i <=[_productArray count]; i++) {
[_quantityArray addObject:@"0"];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
................
if (!_quantityArray || !_quantityArray.count){
cell.lblCount.text = [NSString stringWithFormat:@"%d", 0];
}else{
cell.lblCount.text = [_quantityArray objectAtIndex:indexPath.row];
}
[_quantityLabelArray addObject:cell.lblCount];
if (addBtnClicked || minusBtnClicked) {
//If add or minu button is reloading the cell
cell.lblCount.text = [_quantityArray objectAtIndex:indexPath.row];
//NSLog(@"%@",cell.lblCount.text);
[_quantityLabelArray replaceObjectAtIndex:indexPath.row withObject:cell.lblCount];
addBtnClicked = NO;
minusBtnClicked = NO;
}
else
{
}
cell.btnMinus.tag = indexPath.row;
cell.btnPlus.tag = indexPath.row;
cell.lblCount.tag = indexPath.row;
[cell.btnPlus addTarget:self action:@selector(addItem:) forControlEvents:UIControlEventTouchUpInside];
[cell.btnMinus addTarget:self action:@selector(deleteItem:) forControlEvents:UIControlEventTouchUpInside];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
#pragma mark - UIButton selector
-(void)addItem:(UIButton*)button
{
NSLog(@"btn tag %ld",(long)[button tag]);
NSLog(@"quantitylblarry %@",_quantityLabelArray);
UILabel* lblShowCount = [_quantityLabelArray objectAtIndex:[button tag]];
if ([lblShowCount.text integerValue]< 10) {
count = count+1;
lblShowCount.text = [NSString stringWithFormat:@"%ld", [lblShowCount.text integerValue]+1];
}
NSLog(@"quantity array count %lu",(unsigned long)_quantityArray.count);
if (_quantityArray.count > [button tag]) {
[_quantityArray removeObjectAtIndex:[button tag]];
[_quantityArray insertObject:lblShowCount.text atIndex:[button tag]];
}
else{
[_quantityArray insertObject:lblShowCount.text atIndex:[button tag]];
}
addBtnClicked = YES;
NSLog(@"quantity array %@",_quantityArray);
NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:[button tag] inSection:0];
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[self.tableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
}
-(void)deleteItem:(UIButton*)button{
NSLog(@"%ld",(long)[button tag]);
UILabel* lblShowCount = [_quantityLabelArray objectAtIndex:[button tag]];
if ([lblShowCount.text integerValue]>=1) {
count = count-1;
lblShowCount.text = [NSString stringWithFormat:@"%ld", [lblShowCount.text integerValue]-1];
}
NSLog(@"%lu",(unsigned long)_quantityArray.count);
if (_quantityArray.count > [button tag]) {
[_quantityArray removeObjectAtIndex:[button tag]];
[_quantityArray insertObject:lblShowCount.text atIndex:[button tag]];
}
else{
[_quantityArray insertObject:lblShowCount.text atIndex:[button tag]];
}
NSLog(@"%@",_quantityArray);
minusBtnClicked =YES;
NSLog(@"quantity array %@",_quantityArray);
NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:[button tag] inSection:0];
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[self.tableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
}
вы должны увидеть это http://stackoverflow.com/questions/15652133/how-to-set-action-for-uibutton-in-uitableviewcell ..i сделали это быстро, но не в объективе c ... –
Я знаю, что действие для UIButton в UITable ViewCell, но проблема заключается в установке UILabel каждый раз, когда пользователь нажимает кнопку –
cell.lblTitle.text = "value changed"; это работает? Все, что вы делаете, кажется правильным –