在 table 视图中重用单元格导致按钮问题

reusing of cell in table view causing button problems

我的 table 视图单元格上有一个按钮。我 returning numberOfRowsInSectionreturn arrayname.count。因此我得到的按钮数量与数组计数相同。

我使用该按钮触发通知,当用户再次按下该按钮时,通知被取消。这是一个基于位置的通知。

如果 table 视图中只有一个按钮,则可以正常工作。但是当我 return 2 个或更多单元格时,我似乎无法弄清楚如何在不影响另一个的情况下区分按钮事件。 示例 - table 中有两个单元格和两个按钮。一个用于位置 'a',一个用于位置 'b'。我想要在进入区域 'a' 时收到通知,所以我按下了与位置 'a' 相对应的按钮。但是因为没有按下按钮 'b',所以没有安排通知。只有当所有按钮都处于相同状态时它才能正常工作。 但是,我该如何解决这个问题?

`button.addTarget(self, action: "pressed:", forControlEvents: .TouchUpInside) 
button.setImage(UIImage(named: "a.png")!, forState: .Normal)
 button.tag = 999 
func pressed(sender: UIButton!) { 
if sender.tag == 999 
{ sender.setImage(UIImage(named: "b.png")!, forState: .Normal) 
sender.tag = 0 } else
 { sender.setImage(UIImage(named: "a.png")!, forState: .Normal) sender.tag = 999 } 
}`

我已经在使用此代码在按下按钮时切换图像。

我看不出您遇到的问题与电池重用之间没有联系。

检测按下哪个按钮的最简单方法是添加行:

button.tag = indexPath.row

到您的 cellForRowAtIndexPath 函数。然后在由您的按钮触发的功能中添加:

func buttonPressed(sender:UIButton) {
    let selectedItem = arrayname[sender.tag] // this gives you selected item from array
    // or you can do
    if sender.tag == 0 {
        // button in first cell pressed
    }
}
   /*Buy settings the tag to your button you can identify which button is selected */
    //create a button globally  in your view controller
   uibutton*menu
   // add the below code in your cellForRowAtIndexPath method
   [menus addTarget:self action:@selector(menuclick:) forControlEvents:UIControlEventTouchUpInside];
   menus.tag=indexPath.row+1;
   //identify button using button sender
  (void)menuclick:(id)sender
  {
     NSInteger tagid=[sender tag];
      if(checkbutton.isSelected)
    {
    //you can identify which button get selected
    switch (tagid)
    {
        case 1:
            //button 1 is selected
            break;
        case2:
            //button 2 is selected
            break;
        default:
            break;
    }
    [menu setSelected:NO];
  }
  else
  {
     //you can identify which button get unselected
    switch (tagid)
    {
        case 1:
            //button 1 is selected
            break;
        case2:
            //button 2 is selected
            break;
        default:
            break;
    }
    [menu setSelected:YES];

    }


  }