在我的项目中,我有自定义UITableview
单元格,其中恰好有一个按钮。选择此按钮时,会触发segue。在这个segue中,我将一个对象从单元格传递到目标UIViewcontroller
。我目前正在使用以下代码
else if ([[segue identifier] isEqualToString:@"Add"])
{
SearchAddRecordViewController *addRecordViewController = [segue destinationViewController];
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
SearchCell *cell = [self.tableView cellForRowAtIndexPath:path];
NSLog(@"%@", cell.record);
addRecordViewController.workingRecord = cell.record;
}
事实证明我传递了null,因为按钮没有触发单元格的选择,因此没有indexPathForSelectedRow。我的问题是,如何获取按下按钮的单元格的索引路径。
编辑: 回答
答案 0 :(得分:0)
在自定义单元格的.h文件中声明一个NSIndexpath变量,并将indexPath分配给cellForRowAtindexPath中的该变量。并检索并使用它......希望它能够正常工作
答案 1 :(得分:0)
对于遇到类似问题的人来说,这就是我能够解决这个问题的方法。
我首先使用NSIndexPath属性为UIButton子类创建了实现和头文件。我在故事板中为uibutton分配了这个新自定义unbutton的超类和NSIndexPath属性。我将以下代码添加到segue识别步骤(关键是意识到我可以使用sender对象作为触发segue的源):
else if ([[segue identifier] isEqualToString:@"Add"])
{
SearchAddRecordViewController *addRecordViewController = [segue destinationViewController];
addRecordButton *button = (addRecordButton*) sender;
NSIndexPath *path = button.indexPath;
SearchCell *cell = [self.tableView cellForRowAtIndexPath:path];
addRecordViewController.workingRecord = cell.record;
}
答案 2 :(得分:0)
确定避免子类化UIButton的indexPath的另一种方法是:
CGPoint point = [button.superview convertPoint:button.center toView:self.tableView];
NSIndexPath *path = [self.tableView indexPathForRowAtPoint:point];
编辑:
我已经考虑到了一个很好的方法,你可以添加到UITableView上的类别:
-(NSIndexPath*)indexPathOfCellComponent:(UIView*)component {
if([component isDescendantOfView:self] && component != self) {
CGPoint point = [component.superview convertPoint:component.center toView:self];
return [self indexPathForRowAtPoint:point];
}
else {
return nil;
}
}
答案 3 :(得分:0)
您可以通过以下方式执行此操作,这可以帮助您唯一标识点击的按钮,并且您可以传递适当的值,我只是传递一个字符串值,例如
假设 OutputString 是目标视图控制器中的字符串属性
if ([[segue identifier] isEqualToString:@"yourSegueIdentifier"]) {
UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
NSIndexPath *clickedButtonPath = [self.myTableView indexPathForCell:clickedCell];
[segue.destinationViewController setOutputString:@"XYZ"];
}