2011-09-28 30 views
0

我试图用按钮按钮行为替换标准表格单元格选择行为。结果应该是相同的 - 推动detailViewController顶部,并提出一些详细信息。单元格视图是从单独的xib文件加载的。所以,我需要在该单元格xib中放置一个按钮,然后使用该按钮打开表格VC中的细节VC。我已经在单元格xib中放置了按钮视图,并且禁用了表格VC viewDidLoad中的单元格选择,但是现在,我不知道如何处理该按钮按下,放置按钮按下代码的位置或要使用的代理方法,因为didSelectRowAtIndexPath是不重新编程(因为我禁用它)。有什么建议么?如何使用UITableViewController的按钮实现自定义单元格选择行为?

更新:我需要从单元格(部分,索引)上按钮按下一些信息,以初始化数据的细节VC。另外,应该注意,每个单元格中都会有几个按钮。

UPDATE2:我使用行与部分,所以按下按钮我需要通过对应于细胞在那里被按下的按钮都段和行号。

UPDATE3:我试图使用唯一标签来识别单元格,但它看起来不是解决方案,因为我遇到了单元格重用的问题。前9行被创建,并为其设置相关的标签号码。但是,然后从队列中重用10行中的每一行,以便使用它们的标签获得相同的9视图。例如,第10行从标签1的队列中弹出第一行按钮,第11行 - 第2行的标签为2等按钮。我的意思是,整个出队单元意味着你在表中有多少行没有关系,对于所有的表行都会有9个单元格的重用。这意味着我不能指定唯一的标签的电池,因为电池观点并不为每一行唯一

回答

1

的suggestio带有标签的ns由于UPDATE3中描述的原因而没有解决问题。不过,我通过调用“magic”indexPathForRowAtPoint:方法取得了成功。因此,解决方案是:

1)将自定义方法按钮按下的的cellForRowAtIndexPath:

// I have already created/loaded and got a handler to my button btn 
// here comes attaching 
[btn addTarget:self action:@selector(openDetailViewController:event:) forControlEvents:UIControlEventTouchUpInside]; 

2)定义自定义方法:

-(void)openDetailViewController:(id)sender event:(UIEvent *)event{ 

    NSSet *touches = [event allTouches]; 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentTouchPosition = [touch locationInView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:currentTouchPosition]; 
    // do my stuff 
} 

所以,当按钮被按下我的方法获取称为,传递一些额外的参数,如事件。通过调用“allTouches”和“anyObject”,我正在接触。然后,我从该触摸中检索CGPoint,然后将该点传递给“indexPathForRowAtPoint”,该索引返回具有区段和行号的所需indexPath。酷:)

1

如果我得到乌尔问题的权利,那么这将是解决

[cell.yourButton addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventTouchUpInside]; 
//you can use tag property of button 
    NSUInteger tag=indexPath.row+1; 
    cell.yourButton.tag=tag; 

此代码应在

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

&你写行动

-(IBAction)myAction:(id)sender{ 
    UIButton *but=(UIButton *)sender; 
    NSLog(@"Tag-%d",but.tag); 
    NSUInteger index=but.tag-1; 
    //using tag you will come to know which button is pressed ... 

} 
+0

谢谢,这应该添加“myAction”方法的单元格中的所有按钮。然而,在每一个按钮按下我需要知道什么细胞(indexPath.section和行号)按钮被按下。按钮按钮方法的sender参数只传递一些关于按钮的信息。一种解决方案是为每个按钮设置唯一的标签,但我需要设置两个数字(节号和行号),但标签只能设置一个数字。当然,我可以使用一些智能编码algorythmn将部分和行号绑定到一个标签号码中,但也许还有其他选项...? – Centurion

+0

检查我的答案的编辑...将有帮助 – iAmitWagh

+1

设置标记= a *节+行。 a是足够大的数量以避免相同的标签。 – ChangUZ

相关问题