2013-11-21 4 views
3

Я знаю, что здесь есть много дубликатов, но мое требование состоит в том, что я добавил 2 UIButtons на одну ячейку, и обе кнопки откроют два разных вида. Если я установил свойство userInteractionEnabled в значение YES, то он не будет отображать «finalID» из didSelectRowAtIndexPath из приведенного ниже кода.didSelectRowAtIndexPath не вызывается для UIButton cellForRowAtIndex

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 

    if(tableView == self.tableViewProject){ 
     static NSString *cellId = @"attachmentCellId"; 
     attachmentCell *cell = (attachmentCell *)[self.tableViewProject dequeueReusableCellWithIdentifier:cellId]; 
     if(!cell) 
     { 
      if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
      { 
       NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"attachmentCell" owner:self options:Nil]; 
       for(id object in nib) 
       { 
        if([object isKindOfClass:[attachmentCell class]]) 
        { 
         cell = (attachmentCell *)object; 
         break; 
        } 

       } 
       UIButton *button; 
       button = [[UIButton alloc] initWithFrame:CGRectMake(162, 0, 75, 53)]; 
       [button addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside]; 
       button.userInteractionEnabled = YES; 
//button.userInteractionEnabled = NO; 
       [cell.contentView addSubview:button]; 

       UIButton *buttonAttach = [[UIButton alloc] initWithFrame:CGRectMake(245, 0, 75, 53)]; 
       [buttonAttach addTarget:self action:@selector(buttonAttachClicked) forControlEvents:UIControlEventTouchUpInside]; 


       buttonAttach.userInteractionEnabled = YES; 
//buttonAttach.userInteractionEnabled = NO; 
       [cell.contentView addSubview:buttonAttach]; 

       cell = [nib objectAtIndex:0]; 
       SaveAttachment *attach = [array objectAtIndex:indexPath.row]; 
       cell.name.text = attach.name; 
       cell.list.text = [NSString stringWithFormat:@"%d", attach.list]; 
       cell.attachment.text = [NSString stringWithFormat:@"%d", attach.attachment]; 
       cell.date.text = attach.date; 
      } 
    return cell; 
    } 

И мой DidSelectRowAtIndexPath является

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"Array == %@", anotherTempArray); 

     NSString *finalId = [NSString stringWithFormat:@"%@", [anotherTempArray objectAtIndex:indexPath.row]]; 
     NSLog(@"final id for selected row = %@", finalId); 
     NSUserDefaults *defaultForFinalId = [NSUserDefaults standardUserDefaults]; 
     NSString *setFinalId = finalId; 
     [defaultForFinalId setObject:setFinalId forKey:@"SETFINALID"]; 

    if(tableView == self.tableViewProject) 
    { 

     [self buttonClicked]; 
     //[self viewDidLoadForList]; 

    } 
    if(tableView == self.tableViewAttachmentList) 
    { 


     [self buttonAttachClicked]; 

    } 
} 

ответ

4

Если вы хотите вызвать селектор UIButton внутри ячейки, то, что вам не нужно использовать didSelectRowAtIndexPath метод.

Что вы сделали, было правильным, если добавить обработчик к UIButton. Теперь удалите свой код didSelectRowAtIndexPath, нажав на кнопку мыши. Вот как вы можете получить indexPath из обработчика нажатия кнопки.

- (void)buttonClicked:(UIButton *)sender { 

    UITableViewCell *cell = (UITableViewCell*)sender.superview.superview; //Since you are adding to cell.contentView, navigate two levels to get cell object 
    NSIndexPath *indexPath = [tableView indexPathForCell:cell]; 

    // Now you can do the code you put in didSelectRow here. 
} 

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

+0

Хорошие люди. У меня есть некоторые изменения с быстрым 3. Настолько потрясающе! – marlonpya

1

изменить код для кнопки селектора

[button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; //add colon in selector buttonClicked 


[buttonAttach addTarget:self action:@selector(buttonAttachClicked:) forControlEvents:UIControlEventTouchUpInside]; //add colon in selector buttonAttachClicked 
+0

методы не имеют аргументов suhit –

+0

, когда вы вызываете метод на кнопке, вам необходимо передать ссылку этой кнопки методу и проверить тег или название кнопки для проверки. – suhit

+0

что такое self.tableViewProject и self.tableViewAttachmentList? вы используете два магазина для просмотра таблиц – suhit

1

Если U использовать кнопки, чем U не нужно использовать didSelectRowAtIndexPath. Установите метки на кнопках, чтобы соответствовать indexPath.row клетке в cellForRowAtIndexPath ... Таким образом, когда U нажмите кнопку в buttonAttachClicked или buttonClicked просто проверить отправитель тега и вытащить эту ячейку из UITableView

Используйте этот код для cellForRowAtIndexPath

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

if(tableView == self.tableViewProject){ 
    static NSString *cellId = @"attachmentCellId"; 
    attachmentCell *cell = (attachmentCell *)[self.tableViewProject dequeueReusableCellWithIdentifier:cellId]; 
    if(!cell) 
    { 
     if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
     { 
      NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"attachmentCell" owner:self options:Nil]; 
      for(id object in nib) 
      { 
       if([object isKindOfClass:[attachmentCell class]]) 
       { 
        cell = (attachmentCell *)object; 
        break; 
       } 

      } 

      cell.button = [[UIButton alloc] initWithFrame:CGRectMake(162, 0, 75, 53)]; 
      [cell.button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
      [cell.contentView addSubview:cell.button]; 

      cell.buttonAttach = [[UIButton alloc] initWithFrame:CGRectMake(245, 0, 75, 53)]; 
      [cell.buttonAttach addTarget:self action:@selector(buttonAttachClicked:) forControlEvents:UIControlEventTouchUpInside]; 
      [cell.contentView addSubview:cell.buttonAttach]; 

      cell = [nib objectAtIndex:0]; 
     } 
SaveAttachment *attach = [array objectAtIndex:indexPath.row]; 
cell.name.text = attach.name; 
cell.list.text = [NSString stringWithFormat:@"%d", attach.list]; 
cell.attachment.text = [NSString stringWithFormat:@"%d", attach.attachment]; 
cell.date.text = attach.date;   
[cell.button setTag:indexPath.row]; 
[cell.buttonAttach setTag:indexPath.row];    

return cell; 
} 
+0

, так как положить теги? button.tag = indexpath.row? ? –

+0

Я отредактировал свой ответ ... И затем U определит кнопки, такие как - (void) buttonAttachClicked: (id) отправитель, а другой точно так же, как этот – AntonijoDev

+0

Ok еще одна вещь, U нужно, чтобы ваши кнопки были объектами attachCell так что U может иметь ссылку на них, тогда U просто добавляет ячейку. перед кнопкой и buttonAttach – AntonijoDev

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