2015-08-08 2 views
-1

В пользовательской кнопке есть кнопка. Нажав на нее, он будет выбран/не выбран. Но в TableView, нажав на кнопку в первой ячейке, мне нужно сбросить выделение на остальных. Как я могу это сделать?Пользовательские ячейки и кнопки

ответ

0

Ну, это легко решить вашу проблему с помощью делегата.

Создать протокол где-то любопытный:

@protocol CustomCellDelegate <NSObject> 
@optional 
- (void)handleSelection:(NSIndexPath) indexPath; 
@end 

В классе вашей пользовательской ячейки создать свойства и FUNC:

@property (nonatomic, weak) id <CustomCellDelegate> delegate; 
@property (nonatomic, retain) NSIndexPath *selectedIndexPath; 

- (void) handleTap 
{ 
    [self.delegate handleSelection:self.selectedIndexPath]; 
} 

Тогда в классе стал абонентом вашего взгляда контроллера для CustomCellDelegate и добавить свойство «выбрано» indexPath:

@property (nonatomic, retain) NSIndexPath *currentlySelectedIP; 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // your custom cell stuff 
    customCell.selected = NO; 
    customCell.delegate = self; 
    [customCell.yourButton addTarget:self action:@selector(handleTap) forControlEvents:UIControlEventTouchUpInside]; 
    customCell.selectedIndexPath == indexPath; 
    if (self.currentlySelectedIP != nil) && (self.currentlySelectedIP == indexPath) 
    { 
     customCell.selected = YES; // handle stuff for selected cell/button, whatever 
     } 
    } 

и обрабатывать делегатский f :

- (void) handleSelection:(NSIndexPath) indexPath 
{ 
    self.currentlySelectedIP == indexPath; 
    [self.tableView reloadData]; 
} 
0

Вы можете получить всю ячейку из UITableView. После того, как вы получите все ячейки из UITableView, вы можете легко получить все подпункты из ячейки и кнопку сброса из него.

+0

Как я могу получить всю ячейку? – Leonid

+0

NSArray * cells = [tableView visibleCells] –

0

Вы можете сделать это вот так.

  1. Когда пользователь нажимает на любую кнопку, сначала отмените выбор всех кнопок.
  2. Затем выберите кнопку, которую вы нажали.

Вот код. Это должно быть записано в методе нажатия кнопки пользовательской ячейки.

for (UIView *theView in self.subviews) 
{ 
    if ([theView isKindOfClass:[UIView class]]) 
    { 
     for (UIButton *theButton in theView.subviews) 
     { 
      if ([theButton isKindOfClass:[UIButton class]]) 
      { 
       [theButton setSelected:NO]; 
      } 
     } 
    } 
} 

Надеюсь, это поможет.

+0

, пожалуйста, показать код для этого алгоритма – Leonid

+0

Вам нужна кнопка click в последней ячейке или первой ячейке таблицы? –

+0

clickable все ячейки, но где iam нажмите на кнопку в первой ячейке, выбранные кнопки сбрасывают другие ячейки – Leonid

1

Если вам нужно сбросить все кнопки, нажав любую кнопку ячейки таблицы, тогда в любой момент будет выбрана только одна кнопка. Затем вы можете сохранить ссылку на выбранную ячейку таблицы в контроллере и сбросить ее.

Если вы хотите сбросить все кнопки, нажав кнопку ячейки первой строки, затем получите все видимые ячейки и сбросьте эти ячейки. Все остальные ячейки должны быть сброшены при возвращении вида ячейки из метода источника данных.

Вам необходимо реализовать делегат, чтобы получить уведомление о нажатии кнопки на любую ячейку.

0

положить это в ваш метод cellforrowatindex

if([totalcheckmarkArray containsObject:[NSString stringWithFormat:@"%d",(int)indexPath.row]]) 
{ 
    [cell.btnCheckbox setImage:[UIImage imageNamed: @"chk_check"] forState:UIControlStateNormal]; 
} 
else 
{ 
    [cell.btnCheckbox setImage:[UIImage imageNamed:@"chk_uncheck"]forState:UIControlStateNormal]; 
} 

cell.btnCheckbox.tag=indexPath.row; 
[cell.btnCheckbox addTarget:self action:@selector(checkBoxClicked:) forControlEvents:UIControlEventTouchUpInside]; 

Теперь Когда кнопка нажата в определенном положении необходимо вызвать метод ниже ..

#pragma mark CheckBox Actions 

-(void)checkBoxClicked:(id)sender{ 
UIButton *tappedButton = (UIButton*)sender; 
int totalSection = (int)self.tableview.numberOfSections; 
int totalRow = 0; 
if (tappedButton.tag==0) { 

     [totalcheckmarkArray removeAllObjects]; 
     [indexarray removeAllObjects]; 
     SelectedCateCount=0; 
    NSLog(@"%d",SelectedCateCount); 
} 
else { 
    if([tappedButton.currentImage isEqual:[UIImage imageNamed:@"chk_check"]]) 
    { 
     SelectedCateCount-=1; 
     [totalcheckmarkArray removeObject:[NSString stringWithFormat:@"%d",(int)tappedButton.tag]]; 
     [indexarray removeObject:[arrSelectedCategory objectAtIndex:tappedButton.tag]]; 
    } 
    else 
    { 
     SelectedCateCount+=1; 
     [totalcheckmarkArray addObject:[NSString stringWithFormat:@"%d",(int)tappedButton.tag]]; 
     [indexarray addObject:[arrSelectedCategory objectAtIndex:tappedButton.tag]]; 
    } 
    NSLog(@"%d",SelectedCateCount); 
    if (SelectedCateCount==arrSelectedCategory.count-1) { 
     CellCategory *cell = (CellCategory *)[self.tableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 
     [cell.btnCheckbox setImage:[UIImage imageNamed:@"chk_check"] forState:UIControlStateNormal]; 
     [totalcheckmarkArray addObject:[NSString stringWithFormat:@"%d",(int)cell.btnCheckbox.tag]]; 
    } 
    else{ 
     CellCategory *cell = (CellCategory *)[self.tableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 
     [cell.btnCheckbox setImage:[UIImage imageNamed:@"chk_uncheck"] forState:UIControlStateNormal]; 
     [totalcheckmarkArray removeObject:[NSString stringWithFormat:@"%d",(int)cell.btnCheckbox.tag]]; 
    } 
} 
[_tableview reloadData]; 
NSLog(@"%@",indexarray); 
} 

Теперь согласно вашему требованию изменения в флажком щелкнул метод

Смежные вопросы