在 table 视图中重用单元格导致按钮问题
reusing of cell in table view causing button problems
我的 table 视图单元格上有一个按钮。我 returning numberOfRowsInSection
为 return 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];
}
}
我的 table 视图单元格上有一个按钮。我 returning numberOfRowsInSection
为 return 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];
}
}