2009-11-10 46 views
1

我创建了一个填充了自定义UITableViewCell(like this)的表格视图。每个单元格都包含两个UIButton。我将动作分配给按钮,如下所示:iPhone桌面视图 - 一些按钮/操作问题

[decreaseButton addTarget:self action:@selector(decrease) forControlEvents:UIControlEventTouchUpInside]; 

这是正确的方法吗? 无论如何,它的工作原理,但在我的“减少”方法中,我需要知道我的18个表视图行中的哪个按钮被按下。当然,indexPath.row在cellForRowAtIndexPath方法之外不起作用。 有人可以解释我如何做到这一点?

非常感谢!

iyassin

回答

3

您可以通过两种方式来做到这一点。

检查事件发送

从更改减少方法:

- (void)decrease; 

到:

- (void)decrease:(id)sender; 

时减少被称为这样,你会得到一个参考到触摸了里面事件的按钮。

定义的降低的方法更接近信息

另一种解决方案将是使为每个按钮不同的目标实例(例如,实现减少功能作为自定义单元格的一部分)。这样你就知道被触摸的按钮是当前单元的按钮。

+0

什么样的参考/哪种数据类型是该参考?我只是试图用NSLog将它打印到控制台,但是这使得我的应用程序在点击按钮后立即关闭。 一般来说,我的问题如下:我如何在我的方法中使用它? ;-) – iYassin 2009-11-10 19:29:25

+1

'sender'参数是有事件的按钮的实例。所以你必须以某种方式查找哪个单元具有该按钮。有点烦人,需要额外的状态信息。我会将减小功能移动到Cell类。这样你就不必确定任何东西,你就已经在正确的位置,并知道按下了哪个按钮。 – 2009-11-10 19:36:08

+0

“将减少功能移动到单元类”是什么意思? – iYassin 2009-11-11 10:00:22

1

我解决这个问题的方法是跟踪我可能需要在自定义单元格对象中的数据。并且按钮不是连接到外部接收器,而是连接到自己的单元,反过来知道如何调用动作的真实接收器。

我把我的手机的东西,如:

cell = [[MyTableViewCell alloc] initWithStyle:style 
           reuseIdentifier:CellIdentifier]; 

而且我有一个设置方法,所以我可以重新初始化一个细胞,当我出列,它:

[cell setupMyCellWithContext:objectID 
         target:[[UIApplication sharedApplication] delegate] 
         action:@selector(someAction)]; 

所以你的类中您使用在设置方法中发送的动作和目标来调用真实目标:

- (void)doAction:(id)sender { 
    if ([target respondsToSelector:action]) { 
     [target performSelector:action withObject:objectID afterDelay:0]; 
    } 
} 

因此,当您的用户点击按钮,os会调用[cell doAction:],它会在您使用正确的上下文对象之前调用您设置的目标和动作选择器。