传递按钮标签以执行segue标识符

时间:2015-03-19 04:37:11

标签: ios

我有自定义单元格的表格视图。在单元格上有用标签标识的按钮。 每个按钮都执行一个动作。例如:

-(void)mapa_button_action:(UIButton*)sender
{
    NSLog(@"CANCELAR BUTTON CLICKED=%ld",(long)sender.tag);
    NSString *employee =[[historialServicios objectAtIndex:sender.tag] valueForKey:@"driverId"];
    NSLog(@"EMPLOYEE=%@",employee);
    [self performSegueWithIdentifier:@"mapa_conductor_segue" sender:self];

}

如您所见,该按钮标识为sender.tag属性。 在这种情况下,动作执行segue,然后执行prepareForSegue方法,我可以将变量传递给新的视图控制器。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"mapa_conductor_segue"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSLog(@"INDEXPATH=%@",indexPath);
    }
}

我需要的是从所选单元格中检索值到新视图控制器。 我能够在map_button_action方法中获取值,但我不知道如何将这些值传递给新控制器。

我必须使用performSegueWithIdentifier操作才能维护视图控制器结构,我正在使用SWRevealViewControllers。

欢迎任何帮助。

3 个答案:

答案 0 :(得分:3)

当您调用performSegueWithIdentifier:sender时,您将无用的参数作为发件人传递。如果你想在prepareForSegue中使用该按钮的标签,那么将该标签(转换为NSNumber)设置为发送者 - 你可以在该参数中传递你想要的任何对象,它将是prepareForSegue中的发送者

-(void)mapa_button_action:(UIButton*)sender
{
    NSLog(@"CANCELAR BUTTON CLICKED=%ld",(long)sender.tag);
    NSString *employee =[[historialServicios objectAtIndex:sender.tag] valueForKey:@"driverId"];
    NSLog(@"EMPLOYEE=%@",employee);
    [self performSegueWithIdentifier:@"mapa_conductor_segue" sender:@(sender.tag)];

}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(NSNumber *)sender {
    NSInteger tag = sender.integerValue;
    // do whatever you need to with the tag
    if ([segue.identifier isEqualToString:@"mapa_conductor_segue"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSLog(@"INDEXPATH=%@",indexPath);
    }
}

答案 1 :(得分:1)

试试这个

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"mapa_conductor_segue"]) {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSLog(@"INDEXPATH=%@",indexPath);
    DestinationViewController *objeDest=segue.destinationViewController;
    objeDest.destinationIndexPath=indexPath

}
}

答案 2 :(得分:1)

在目标ViewController中创建一个属性(您需要传入数据的类型)。您可以在当前ViewController中创建目标控制器的对象,并在map_button_action方法中设置此对象的值以执行您想要的操作。

//DestinationViewController.h

@interface DestinationViewController : UIViewController

@property (nonatomic,strong) (SomeDataType*) propertyName;

@end 

//CurrentViewController.m

#import DestinationViewController

....

map_button_action{

    DestinationViewController *obj = [DestinationViewController new];
    obj.propertyName = someValue;
    [self.navigationController pushViewController:obj animated:YES]

}