2015-04-30 3 views
1

Как обнаружить несколько кнопок в ячейке tableview, и мое сомнение - это пример, у меня есть 3 кнопки в ячейке, если я нажимаю одну кнопку, кнопка будет менять цвет, и если я нажму indexpath.row = 1 клетка кнопки, что кнопка будет цвет также нужно изменить мне помочьКак обнаружить несколько кнопок в ячейке tableview

+0

"индексный путь.row = 1 cell button ", что вы пытаетесь сказать? –

+0

У меня есть 3 кнопки в каждой ячейке, если я нажму любую кнопку, которую нужно изменить, только в этой ячейке –

+0

Вы должны жестко закодировать кнопки в ячейке таблицы с помощью уникальные теги и назначить каждой кнопке действие с параметрами (тег тега, Indexpath.row). –

ответ

0

Я сделал так:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *MyIdentifier = @"MyIdentifier"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
             reuseIdentifier:MyIdentifier]; 
    } 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame = CGRectMake(10.0, 0.0, self.tableView.frame.size.width/4, 40.0); 
    button.tag = 100 + indexPath.row*total_buttons_in_a_row; 
    [button setTitle:[NSString stringWithFormat:@"%ld",(long)button.tag] forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell addSubview:button]; 

    UIButton *button2 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button2.frame = CGRectMake(10.0+self.tableView.frame.size.width/4+10.0, 0.0, self.tableView.frame.size.width/4, 40.0); 
    button2.tag = 100 + indexPath.row*total_buttons_in_a_row + 1; 
    [button2 setTitle:[NSString stringWithFormat:@"%ld",(long)button2.tag] forState:UIControlStateNormal]; 
    [button2 addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell addSubview:button2]; 

    UIButton *button3 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button3.frame = CGRectMake(10.0+self.tableView.frame.size.width/4*2+10.0, 0.0, self.tableView.frame.size.width/4, 40.0); 
    button3.tag = 100 + indexPath.row*total_buttons_in_a_row + 2; 
    [button3 setTitle:[NSString stringWithFormat:@"%ld",(long)button3.tag] forState:UIControlStateNormal]; 
    [button3 addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell addSubview:button3]; 

    return cell; 
} 

-(void)btnClicked:(UIButton *)sender{ 
    id selectedButton = [self.view viewWithTag:sender.tag]; 
    if ([selectedButton backgroundColor] == [UIColor redColor]) { 
     [selectedButton setBackgroundColor:[UIColor clearColor]]; 

    }else{ 
     [selectedButton setBackgroundColor:[UIColor redColor]]; 
    } 
} 

total_buttons_in_a_row является Int. В вашем случае определить его в viewDidLoadtotal_buttons_in_a_row=3

P.S - набор кнопок CGRectMake в соответствии с вашими потребностями.

+0

Отличная работа Прекрасная Спасибо @the_UB –

+0

Рад помочь !!! –

1

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

Когда метод назначается кнопке дозвонились использование «%» & «/ 'для дальнейших манипуляций.

Позвольте мне знать, если у вас есть какие-либо трудности в осуществлении его ..

0

Got к вашему CustomCell.h & прямо под #import добавить этот код.

@protocol CustomCellDelegate <NSObject> 
- (void)buttonActionwith :(NSIndexPath *)indexPath; 
@end 

Затем добавьте этот код прямо под @interface CustomCell: UITableViewCell

//Manual Properties 
@property (strong, nonatomic) NSIndexPath *buttonIndexPath; 

//Delegate 
@property (nonatomic, weak) id <CustomCellDelegate> delegate; 

Использование этого NSIndexPath заключается в определении, какой Выбирая пользовательские ячейки.

Затем перейдите на CustomCell.m & в свою кнопку. Метод IBAction добавьте этот код.

[self.delegate buttonActionwith:self.buttonIndexPath]; 

Смысл этой строки кода является то, что, когда пользователь TouchUpInside кнопку в вызовах метода ячейки buttonActionwith делегата, если вы установите этот CustomCellDelegate в вашем UIViewController, где UITableView в том, что метод делегата будет вызывать внутри что ViewController тоже.

Теперь перейдите к вашему MainViewController.h & добавить CustomCellDelegate & это будет выглядеть после того,

@interface MainViewController : UIViewController <CustomCellDelegate,,UITableViewDataSource,UITableViewDelegate> 

при создании пользовательских UITableViewCell в - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath не забудьте добавить эту строку кода перед возвратная ячейка;

//Set Cell Values Here 
cell.delegate = self; //Setting delegate to self 
cell.buttonIndexPath = indexPath; 

Модифицированный - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath будет выглядеть следующим образом,

static NSString *MyIdentifier = @"MyIdentifier"; //Set Identifier for cell 

     CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier: MyIdentifier]; //init CustomCell 

     if (cell == nil) { //Check cell is nill or not 
      NSArray *nib; 
      nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" 
               owner:self options:nil]; //if cell is nil add CustomCell Xib 

      for (id oneObject in nib) if ([oneObject isKindOfClass:[CustomCell class]]) 
       cell = (CustomCell *)oneObject; 
     } 

     //Set Cell Values Here 
     cell.buttonIndexPath = indexPath 

     return cell; 

Наконец, добавьте этот метод в MainViewController.m

#pragma mark - SwipeableCellDelegate 
- (void)buttonActionwith:(NSIndexPath *)indexPath { //Delegate method 
    NSLog(@"Button Clicks at index %ld",(long)indexPath.row); 
} 

Это как добавить одну кнопку внутри ячейки. вы можете использовать этот метод для большего количества кнопок в ячейке.

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